In this AIT Brainlab standard, we develop reusable Django app modules, not monolithic Django websites.
├── django_manage.py # Root management script
├── src/
│ ├── django_core/ # Development host configuration
│ │ ├── __init__.py
│ │ ├── asgi.py
│ │ ├── settings.py # Environment-aware settings
│ │ ├── urls.py # Root router
│ │ └── wsgi.py
│ └── django_module/ # Example reusable modular app
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations/
│ ├── models.py
│ ├── tests.py
│ └── views.py
src/django_core/: Minimal harness used for local development and testing. Production deployments will plug your app into their own Django host or service framework.src/django_module/: The actual modular app that should remain standalone and decoupled.
Use uv run django_manage.py to execute Django commands:
# Run system integrity check
uv run django_manage.py check
# Start development server
uv run django_manage.py runserver 0.0.0.0:8000
# Make migrations for your module
uv run django_manage.py makemigrations django_module
# Apply database migrations
uv run django_manage.py migrate
# Create superuser
uv run django_manage.py createsuperuser-
Generate the app boilerplate inside
src/:uv run django_manage.py startapp myapp src/myapp
-
Register the module in
src/django_core/settings.py:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', # <-- Add your app here ]
-
Route URLs in
src/django_core/urls.py:from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('myapp/', include('myapp.urls')), # <-- Add route here ]
Settings dynamically adapt based on .env:
DEBUG: AutomaticallyTrueindev, andFalseinstg/prod.ALLOWED_HOSTS: Controlled viaALLOWED_HOSTSin.env(defaults to*indev).DJANGO_SECRET_KEY: Set viaDJANGO_SECRET_KEYin.env.