What the generated Django app contains
Project structure
{project}/
├── manage.py
├── config/
│ ├── settings/
│ │ ├── base.py # shared settings — reads from os.environ
│ │ ├── development.py # dev overrides
│ │ └── production.py # production settings
│ ├── urls.py # root URL conf
│ ├── wsgi.py # WSGI entry point
│ └── celery.py # Celery config (if async tasks in genome)
├── apps/
│ ├── users/ # custom User model, auth
│ │ ├── models.py # CustomUser, Role, Workspace, Invitation
│ │ ├── serializers.py
│ │ ├── views.py # auth endpoints
│ │ ├── urls.py
│ │ └── admin.py
│ └── {entity}/ # one app per entity in your PRD
│ ├── models.py # Django model + manager
│ ├── serializers.py # DRF serializer
│ ├── views.py # DRF viewset (ModelViewSet)
│ ├── urls.py # router registration
│ ├── permissions.py # IsWorkspaceMember, IsOwner
│ ├── filters.py # django-filter FilterSet
│ ├── admin.py # ModelAdmin with list display
│ └── tests/
│ ├── test_models.py
│ ├── test_views.py
│ └── test_serializers.py
└── requirements/
├── base.txt # pinned production deps
└── development.txt # + dev tools
Django ORM models and migrations
- Custom
AbstractUserbase — never patching Django's built-in user django-organizationsor custom Workspace/Tenant model- Manager with
get_queryset()scoped to workspace:Model.objects.filter(workspace=workspace) django-guardianor custom permission backend for object-level permissions- Every model:
created_at,updated_atauto fields;workspaceFK indexed - Every schema change:
python manage.py makemigrationsmigration committed in repo
Django REST Framework
DefaultRouterregistered in each app'surls.pyModelViewSetfor CRUD —ListModelMixin,CreateModelMixin, etc. split for read-only entitiespermission_classes = [IsAuthenticated, IsWorkspaceMember]on every viewsetfilterset_classfor filtering and search on list endpointsPageNumberPagination— consistentcount,next,previous,resultsresponse- Error format:
{"error": "snake_case_code", "message": "Human readable description."}
Authentication
djangorestframework-simplejwtwith JWT in httpOnly cookies- Custom
CookieJWTAuthenticationclass — reads token from cookie, not Authorization header - Login: validates credentials, sets access + refresh cookies, returns user profile
- Logout: blacklists refresh token, clears cookies
@permission_classes([IsAuthenticated])on every view that requires auth
Django Admin
ModelAdminfor every entity:list_display,search_fields,list_filter,readonly_fieldsInlineModelAdminfor related entities- Custom admin site with branding matching the product name
Tests
pytest-djangotest suiteAPIClientfixture for authenticated/unauthenticated request testing- Model tests: field validation, manager scoping, signal behavior
- View tests: CRUD operations, permission enforcement, pagination, filtering
- Multi-tenant isolation: request as workspace A member cannot see workspace B data
Celery + Redis (when async tasks in genome)
- Celery app in
config/celery.pywith task autodiscovery tasks.pyin each app for async jobsdjango-celery-beatfor periodic tasks- Result backend: Redis
Infrastructure
- Multi-stage Dockerfile
docker-compose.yml: Django + PostgreSQL + Redis + Nginx- Gunicorn with gevent workers for production
- GitHub Actions: flake8/ruff → pytest → build → deploy
Django vs Flask vs FastAPI — which to pick
Choose Django when:
- You want the most complete framework — admin, auth, ORM, forms, caching all included
- You need a working Django admin for internal tools from day one
- You're building a content-heavy or data-heavy app that needs the full ORM power
- Your team knows Django
Choose Flask when:
- You want explicit control over each component
- You're building a microservice or lightweight API
Choose FastAPI when:
- You need async performance and native OpenAPI docs
- You're building an API-first product
All three are generated by Archiet from the same requirements document.
vs cookiecutter-django and other Django starters
cookiecutter-django is the gold standard Django project template. It handles settings, Docker, Celery, coverage, and many common patterns — and it does it well. Its output is a shell you configure and fill.
Archiet generates the shell AND the product inside it: your models, your viewsets, your serializers, your admin, your tests — from your requirements. cookiecutter-django is where most Django projects start; Archiet is how you skip the next 6 weeks.
CTA
Generate a complete Django + Next.js application from your requirements — free plan, no credit card.
Describe your product or upload a PRD, pick Django + Next.js, download a production-ready Django codebase in 90 seconds.
Start free at archiet.com.