Skip to Content

Core Management Commands

Essential commands for Django-CFG project setup, configuration management, and validation.

Project Setup

django-cfg create-project

Creates a new Django project by downloading the latest template from GitHub.

django-cfg create-project PROJECT_NAME [OPTIONS]
Argument/OptionTypeDefaultDescription
PROJECT_NAMEstrrequiredName for the project directory (letters, numbers, underscores, hyphens)
--path, -pPATHcurrent dirParent directory where to create the project
--force, -fflagFalseOverwrite existing directory if it exists

Examples:

# Basic project creation django-cfg create-project my_awesome_app # Create in specific directory django-cfg create-project my_saas --path /projects # Force overwrite existing directory django-cfg create-project my_app --force

What it creates:

my_awesome_app/ ├── docker/ # Docker deployment │ ├── docker-compose-local.yaml │ ├── docker-compose-production.yaml │ └── services/ └── projects/ ├── django/ # Django backend │ ├── api/ │ ├── apps/ │ ├── core/ │ ├── manage.py │ └── pyproject.toml ├── frontend/ # Next.js frontend │ ├── apps/ │ └── packages/ └── electron/ # Desktop app (optional)

Features included:

  • ✅ Type-safe configuration with Pydantic v2
  • ✅ Modern Unfold admin interface
  • ✅ API documentation with Spectacular
  • ✅ JWT authentication system
  • ✅ Multi-database support
  • ✅ Background task processing (django-rq)
  • ✅ Docker deployment ready
  • ✅ Streamlit admin (auto-starts with Django)
  • ✅ Electron desktop app template

django-cfg info

Shows Django-CFG installation and system information.

django-cfg info [OPTIONS]
OptionTypeDescription
--verbose, -vflagShow detailed information including paths

Examples:

# Basic information django-cfg info # Detailed information with paths django-cfg info --verbose

Output includes:

  • Django-CFG version and Python version
  • 📋 Project template availability and status
  • Core dependencies (Django, Pydantic, Click)
  • 🌐 Service integrations (OpenAI)
  • Admin & UI packages (Unfold, Constance)
  • 📊 API & documentation tools (DRF, Spectacular)
  • Background processing (Django-RQ, Redis)
  • Development tools (Ngrok)

Configuration Management

show_config

Displays current Django-CFG configuration.

python manage.py show_config [OPTIONS]
OptionTypeDefaultDescription
--formatjson|yaml|tableyamlOutput format
--include-secretsflagFalseInclude sensitive values (use with caution)
--sectionTEXT-Show specific configuration section

Examples:

# Show all configuration python manage.py show_config # JSON format for automation python manage.py show_config --format json # Show only database configuration python manage.py show_config --section database # Include sensitive values (be careful!) python manage.py show_config --include-secrets

check_settings

Comprehensive validation and debugging for Django-CFG configuration.

python manage.py check_settings [OPTIONS]
OptionTypeDescription
--email-testflagTest email configuration
--verboseflagVerbose output with detailed diagnostics

Examples:

# Check all settings python manage.py check_settings # Test email configuration python manage.py check_settings --email-test # Verbose output with detailed diagnostics python manage.py check_settings --verbose

Checks:

  • Configuration validity
  • Database connections
  • Email settings
  • Service integrations
  • File permissions
  • Environment variables

API Endpoints Testing

check_endpoints

Check health and availability of all registered API endpoints.

python manage.py check_endpoints [OPTIONS]
OptionTypeDefaultDescription
--include-unnamedflagFalseInclude unnamed URL patterns in the check
--timeoutINTEGER5Request timeout in seconds
--jsonflagFalseOutput results as JSON
--urlTEXT-Check specific endpoint by URL name
--no-authflagFalseDisable automatic JWT authentication retry

Examples:

# Check all endpoints (with auto-auth for protected endpoints) python manage.py check_endpoints # Include unnamed URL patterns python manage.py check_endpoints --include-unnamed # Custom timeout (10 seconds) python manage.py check_endpoints --timeout 10 # Disable auto-auth (show 401/403 as-is) python manage.py check_endpoints --no-auth # JSON output for automation/CI python manage.py check_endpoints --json # Check specific endpoint by name python manage.py check_endpoints --url endpoints_status

Output:

Overall Status: UNHEALTHY 📊 Summary: Total endpoints: 399 Healthy: 0 ⚠️ Warnings: 0 Unhealthy: 69 Errors: 90 ⏭️ Skipped: 240 🔗 Endpoints: endpoints_status URL: /cfg/api/endpoints/ Status: healthy Response time: 0.123s api_users_list URL: /api/users/ Status: healthy Response time: 0.245s 🔐 Required JWT authentication api_payments_list URL: /api/payments/ Status: unhealthy Error: Database connection failed

JSON Output:

{ "status": "unhealthy", "timestamp": "2025-10-05T18:00:20.111738+00:00", "total_endpoints": 399, "healthy": 0, "unhealthy": 69, "warnings": 0, "errors": 90, "skipped": 240, "endpoints": [ { "url": "/cfg/api/endpoints/", "url_name": "endpoints_status", "namespace": "", "group": "cfg/api/endpoints", "view": "EndpointsStatusView", "status": "healthy", "status_code": 200, "response_time_ms": 0.23, "is_healthy": true, "last_checked": "2025-10-05T18:00:20.111738+00:00", "required_auth": false }, { "url": "/api/users/", "url_name": "api_users_list", "namespace": "", "group": "api/users", "view": "UserViewSet", "status": "healthy", "status_code": 200, "response_time_ms": 0.45, "is_healthy": true, "last_checked": "2025-10-05T18:00:20.211738+00:00", "required_auth": true } ] }

What it checks:

  • ✅ All registered URL patterns
  • ✅ HTTP status codes (200, 401, 403, etc.)
  • ✅ Response times in milliseconds
  • ✅ Endpoint availability
  • ✅ Error detection and reporting
  • ✅ Grouping by URL namespace

Excluded endpoints:

  • ❌ Admin endpoints (/admin/)
  • ❌ Static/media files (/static/, /media/)
  • ❌ Health check endpoints (/cfg/health/)
  • Schema documentation (/schema/)
  • ❌ Django debug toolbar (/__debug__/, /__reload__/)

Status Categories:

StatusDescriptionHTTP Codes
HealthyEndpoint working correctly200-299, 301-308, 401, 403, 405
WarningMight be OK (no data)404
UnhealthyEndpoint has issues400, 500+
ErrorException occurredConnection errors, timeouts
SkippedRequires parametersURLs with <pk>, <id>

Use Cases:

Development:

# Quick check during development python manage.py check_endpoints

CI/CD Pipeline:

# Automated testing in GitHub Actions python manage.py check_endpoints --json > endpoints-report.json

Production Monitoring:

# Health check with custom timeout python manage.py check_endpoints --timeout 10

Debugging:

# Check specific problematic endpoint python manage.py check_endpoints --url api_users_list

Features:

  • ✅ Auto-discovers all registered endpoints
  • Smart JWT Auto-Authentication - Automatically retries protected endpoints with JWT token
  • ✅ Creates test user endpoint_test_user once and reuses token
  • ✅ Respects Django Test Client
  • ✅ No ALLOWED_HOSTS issues (uses localhost)
  • Excludes schema documentation (prevents rate limiting issues)
  • ✅ Excludes recursive endpoints (health checks)
  • ✅ Colored console output with emojis
  • ✅ JSON export for automation
  • ✅ Response time measurement
  • ✅ Indicates which endpoints required authentication (🔐)

Database Operations

migrate_all

Migrate all databases based on django-cfg configuration.

python manage.py migrate_all [OPTIONS]
OptionTypeDescription
--dry-runflagShow what would be migrated without executing
--skip-makemigrationsflagSkip makemigrations step

Examples:

# Migrate all databases python manage.py migrate_all # Dry run to see what would happen python manage.py migrate_all --dry-run # Skip makemigrations python manage.py migrate_all --skip-makemigrations

Features:

  • Auto-detects all databases from django-cfg configuration
  • Creates migrations for all apps
  • Migrates each database based on routing configuration
  • Migrates constance separately
  • Handles app-specific routing

migrator

Interactive database migration tool with automatic database detection and routing support.

python manage.py migrator [OPTIONS]
OptionTypeDescription
--autoflagAutomatic migration mode (no prompts, migrates all databases)
--databaseTEXTTarget specific database only
--appTEXTTarget specific app only

Examples:

# Interactive mode (default) - shows menu python manage.py migrator # Auto-migrate all databases (no prompts) python manage.py migrator --auto # Migrate specific database python manage.py migrator --database blog_db # Migrate specific app across all databases python manage.py migrator --app blog # Migrate specific app on specific database python manage.py migrator --database blog_db --app blog

Interactive Mode:

When run without --auto, shows an interactive menu:

🗄️ Django Database Migrator ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 Current Configuration: Databases: default, blog_db, shop_db Apps: accounts, blog, shop, profiles What would you like to do? > Migrate all databases (recommended) Migrate specific database Show database status View configuration info Exit

Auto Mode (--auto):

Runs automatic migration without prompts:

  1. Creates migrations - Runs makemigrations for all apps
  2. Migrates default database - Migrates main database first
  3. Migrates routed databases - Migrates blog_db, shop_db based on routing rules
  4. Migrates constance - Always migrates constance app (required by django-cfg)

Example Output:

$ python manage.py migrator --auto 🚀 Running automatic migration... 📦 Creating migrations for all apps... Migrations created successfully 🔄 Migrating database: default 📦 Migrating all apps... Migrations completed for default 🔄 Migrating database: blog_db 📦 Migrating app: blog Migrations completed for blog_db 🔄 Migrating database: shop_db 📦 Migrating app: shop Migrations completed for shop_db Constance migrated successfully

How Routing Works:

The migrator respects DATABASE_ROUTING_RULES from settings:

DATABASE_ROUTING_RULES = { 'blog': 'blog_db', 'shop': 'shop_db', }
  • Apps listed in routing rules → migrate on their target database only
  • Apps NOT listed → migrate on default database
  • Constance app → always migrates on default database

Comparison with migrate_all:

Featuremigrator --automigrate_all
Interactive menu✅ Yes (without —auto)❌ No
Auto makemigrations✅ Yes✅ Yes (unless —skip-makemigrations)
Respects routing rules✅ Yes✅ Yes
Specific database✅ —database flag❌ Migrates all
Specific app✅ —app flag❌ Migrates all apps
Constance handling✅ Automatic✅ Automatic
Best forDevelopment, targeted migrationsProduction, CI/CD

Use Cases:

Development:

# Quick migration during development python manage.py migrator --auto

Testing specific database:

# Test blog database migrations only python manage.py migrator --database blog_db

Troubleshooting:

# Interactive mode to explore database status python manage.py migrator # Select "Show database status" from menu

CI/CD Pipeline:

# Production deployment - use migrate_all python manage.py migrate_all

Features:

  • ✅ Automatic database discovery from settings
  • ✅ Respects DATABASE_ROUTING_RULES
  • ✅ Interactive menu with questionary
  • ✅ Progress indicators with emojis
  • ✅ Database status checking
  • ✅ Configuration info display
  • ✅ Constance app auto-migration

Development Server

runserver (Enhanced)

Enhanced development server with better output and options.

poetry run cli runserver [OPTIONS]
OptionTypeDefaultDescription
--portINTEGER8000Port number
--hostTEXT127.0.0.1Host address
--debugflagFalseEnable debug mode
--no-reloadflagFalseDisable auto-reload

Examples:

# Basic server poetry run cli runserver # Custom port and host poetry run cli runserver --port 3000 --host 0.0.0.0 # Production-like settings poetry run cli runserver --no-reload --port 8080

Features:

  • Rich colored output
  • 📊 Better error formatting
  • Faster startup time
  • Smart configuration detection

User Management

superuser (Enhanced)

Enhanced superuser creation with better UX.

poetry run cli superuser [OPTIONS]
OptionTypeDefaultDescription
--emailTEXT-Email address for superuser
--usernameTEXTemailUsername (optional, defaults to email)
--interactiveflagTrueInteractive mode
--no-inputflagFalseNon-interactive mode

Examples:

# Interactive superuser creation poetry run cli superuser # Pre-fill email poetry run cli superuser --email [email protected] # Non-interactive (password will be prompted) poetry run cli superuser --email [email protected] --no-input

create_token

Create API tokens for authentication.

python manage.py create_token USERNAME [OPTIONS]
Argument/OptionTypeDefaultDescription
USERNAMEstrrequiredUsername to create token for
--nameTEXT-Token name/description
--expires-inINTEGER-Expiration in days

Examples:

# Create token for user python manage.py create_token admin # Create token with specific name python manage.py create_token admin --name "API Access Token" # Create token with expiration (30 days) python manage.py create_token admin --expires-in 30

URL Management

show_urls (Enhanced)

Lists all URL patterns in the project.

poetry run cli show-urls [OPTIONS]
OptionTypeDefaultDescription
--formattable|json|listtableOutput format
--include-adminflagFalseInclude admin URLs
--patternTEXT-Filter URLs by pattern

Examples:

# Show all URLs in table format poetry run cli show-urls # JSON format for automation poetry run cli show-urls --format json # Filter API URLs only poetry run cli show-urls --pattern "api/" # Include admin URLs poetry run cli show-urls --include-admin

list_urls

List all URL patterns in the project.

python manage.py list_urls [OPTIONS]
OptionTypeDescription
--patternTEXTFilter by pattern
--names-onlyflagShow URL names only
--outputFILEExport to file

Examples:

# List all URLs python manage.py list_urls # Filter by pattern python manage.py list_urls --pattern api # Show URL names only python manage.py list_urls --names-only # Export to file python manage.py list_urls --output urls.txt

Utility Commands

clear_constance

Clear Constance dynamic settings cache.

python manage.py clear_constance [OPTIONS]
OptionTypeDescription
--keysTEXTClear specific keys (comma-separated)
--dry-runflagDry run to see what would be cleared

Examples:

# Clear all constance cache python manage.py clear_constance # Clear specific keys python manage.py clear_constance --keys KEY1,KEY2 # Dry run to see what would be cleared python manage.py clear_constance --dry-run

Tips

  • Use check_settings --verbose before deployment
  • Use migrate_all --dry-run to preview migrations
  • Use create_token --expires-in 90 for limited lifetime tokens

Workflow Examples

# Pre-deployment checklist python manage.py check_settings --verbose && \ python manage.py check_settings --verbose && \ python manage.py migrate_all --dry-run

See Also

Last updated on