mirror of
https://github.com/frappe/frappe_docker.git
synced 2026-06-17 13:55:08 +00:00
163 lines
4.6 KiB
Markdown
163 lines
4.6 KiB
Markdown
---
|
|
title: Framework Comparisons
|
|
---
|
|
|
|
# Framework Comparisons
|
|
|
|
> **Note:** This section provides comparisons to other frameworks for developers familiar with them. If you're new to all frameworks, you can skip this section - the rest of the guide is self-contained.
|
|
|
|
## Frappe vs Django Concepts
|
|
|
|
### Project Structure Comparison
|
|
|
|
**Django Project:**
|
|
|
|
```python
|
|
myproject/
|
|
├── myproject/ # Project settings
|
|
│ ├── settings.py
|
|
│ ├── urls.py
|
|
│ └── wsgi.py
|
|
├── blog/ # Django app
|
|
│ ├── models.py
|
|
│ ├── views.py
|
|
│ └── urls.py
|
|
├── shop/ # Django app
|
|
└── users/ # Django app
|
|
```
|
|
|
|
**Frappe Bench:**
|
|
|
|
```
|
|
bench/
|
|
├── apps/
|
|
│ ├── frappe/ # Core framework (comparable to Django itself)
|
|
│ ├── erpnext/ # Complete business app (like Django + DRF + Celery + admin)
|
|
│ ├── hrms/ # HR Management app
|
|
│ └── my_custom_app/ # YOUR custom app
|
|
└── sites/
|
|
└── mysite.com/ # Site instance (like Django project + database)
|
|
├── site_config.json
|
|
└── private/files/
|
|
```
|
|
|
|
### Conceptual Mapping
|
|
|
|
| Django | Frappe | Notes |
|
|
| ------------------ | ----------------- | ----------------------------------------------- |
|
|
| Model | DocType | But includes UI, permissions, API automatically |
|
|
| View | Controller method | Much less code needed |
|
|
| Admin | Desk | More powerful, auto-generated |
|
|
| DRF Serializer | Built-in | Automatic from DocType |
|
|
| Celery task | Background job | Built-in, no separate setup |
|
|
| signals | hooks.py | More structured |
|
|
| Management command | bench command | More discoverable |
|
|
|
|
### Key Architectural Differences
|
|
|
|
1. **Multi-tenancy**
|
|
|
|
- Django: One app = one database (typically)
|
|
- Frappe: One installation = many sites, each with own database
|
|
|
|
2. **Background Jobs**
|
|
|
|
- Django: Requires Celery + Redis + worker setup
|
|
- Frappe: Built-in queue system, just use `enqueue()`
|
|
|
|
3. **Real-time**
|
|
|
|
- Django: Requires Channels + Redis + ASGI setup
|
|
- Frappe: Socket.IO built-in, automatic for DocType updates
|
|
|
|
4. **Admin/Management**
|
|
|
|
- Django: Admin for models, basic CRUD
|
|
- Frappe: Full-featured Desk with reports, dashboards, permissions
|
|
|
|
5. **API**
|
|
- Django: Manual DRF setup, serializers, views
|
|
- Frappe: Automatic REST + RPC from DocType definitions
|
|
|
|
### Code Comparison Example
|
|
|
|
**Creating a "Customer" model:**
|
|
|
|
Django (requires ~50+ lines):
|
|
|
|
```python
|
|
# models.py
|
|
class Customer(models.Model):
|
|
name = models.CharField(max_length=100)
|
|
email = models.EmailField(unique=True)
|
|
|
|
# serializers.py
|
|
class CustomerSerializer(serializers.ModelSerializer):
|
|
# ...
|
|
|
|
# views.py
|
|
class CustomerViewSet(viewsets.ModelViewSet):
|
|
# ...
|
|
|
|
# urls.py
|
|
router.register(r'customers', CustomerViewSet)
|
|
|
|
# admin.py
|
|
@admin.register(Customer)
|
|
class CustomerAdmin(admin.ModelAdmin):
|
|
# ...
|
|
```
|
|
|
|
Frappe (DocType JSON + ~10 lines Python):
|
|
|
|
```json
|
|
// customer.json (auto-generated via UI or code)
|
|
{
|
|
"name": "Customer",
|
|
"fields": [
|
|
{ "fieldname": "customer_name", "fieldtype": "Data" },
|
|
{ "fieldname": "email", "fieldtype": "Data", "unique": 1 }
|
|
]
|
|
}
|
|
```
|
|
|
|
```python
|
|
# customer.py (only for custom business logic)
|
|
import frappe
|
|
from frappe.model.document import Document
|
|
|
|
class Customer(Document):
|
|
def validate(self):
|
|
# Custom validation logic only
|
|
pass
|
|
```
|
|
|
|
✅ **Automatically includes:**
|
|
|
|
- REST API (`/api/resource/Customer`)
|
|
- List view, Form view
|
|
- Search, Filters, Sorting
|
|
- Permissions (Create, Read, Update, Delete)
|
|
- Audit trail (created_by, modified_by, versions)
|
|
- Print formats, Email templates
|
|
|
|
### When to Choose Frappe vs Django
|
|
|
|
**Choose Frappe when:**
|
|
|
|
- Building business applications (ERP, CRM, project management)
|
|
- Need multi-tenancy out-of-the-box
|
|
- Want rapid development with auto-generated UI
|
|
- Need role-based permissions and workflows
|
|
- Building for non-technical users who need customization
|
|
|
|
**Choose Django when:**
|
|
|
|
- Building consumer web apps (social media, e-commerce frontend)
|
|
- Need full control over every aspect
|
|
- Have highly custom UI requirements
|
|
- Team is already Django-expert
|
|
- Building API-only services
|
|
|
|
**Hybrid Approach:**
|
|
Many teams use both: Frappe for back-office/admin tools, Django for customer-facing web apps.
|