+
Skip to content

A lightweight Django project generator for rapid scaffolding of apps, models, and templates. Ideal for developers seeking to streamline Django setup and code generation.

License

Notifications You must be signed in to change notification settings

giacomo/dj-maker

Repository files navigation

🚀 DJ Maker - Supercharge Your Django Development

PyPI version Python Support Django Support License: MIT codecov Tests

Rapidly generate Django apps, models, views, URLs, and templates with a single command.

DJ Maker is a powerful code generation tool that accelerates Django development by automatically creating complete CRUD applications, API endpoints, and boilerplate code. Say goodbye to repetitive tasks and hello to productive development! ⚡

✨ Features

🏗️ Complete App Generation

  • Full CRUD Apps: Generate complete Django applications with models, views, URLs, and templates
  • Multiple View Types: Support for function-based views, class-based views, and DRF API views
  • Smart Templates: Beautiful, responsive HTML templates with Bootstrap styling
  • Advanced URL Patterns: Nested URLs, namespacing, and API versioning support

🎯 Developer Experience

  • Rich CLI Interface: Beautiful, colored terminal output powered by Rich
  • Interactive Prompts: Guided setup with intelligent defaults
  • Preview Mode: See what will be generated before creating files
  • Type Safety: Full type annotations and mypy support

🔧 Flexibility & Power

  • API-First Development: Generate Django REST Framework endpoints automatically
  • Custom Namespacing: Support for API versioning and modular architectures
  • Template Customization: Jinja2-powered templates with extensibility
  • Project Integration: Seamlessly integrates with existing Django projects

🚀 Quick Start

Installation

pip install dj-maker

Create Your First Project

# Create a new Django project with best practices
dj init myblog

# Navigate to your project
cd myblog

Generate Your First App

# Create a complete blog app with CRUD operations
dj generate blog Post --view-type=class

# Generate an API-first app with DRF integration
dj generate api articles Article --view-type=api --namespace=v1

# Create function-based views for maximum control
dj generate shop Product --view-type=function

Initialize Apps in Existing Projects

# Create a new Django app with URLs and tests
dj init-app users

# Create app with specific URL template
dj init-app api --url-template=api --include-tests

📖 Usage Examples

🎨 Basic CRUD Generation

Generate a complete blog application with class-based views:

dj generate blog Post --view-type=class

Generated structure:

blog/
├── __init__.py
├── admin.py              # Admin interface with list_display, filters
├── apps.py
├── models.py             # Post model with common fields (title, description, timestamps)
├── views.py              # Complete CRUD class-based views
├── urls.py               # RESTful URL patterns
├── templates/blog/       # Bootstrap-styled templates
│   ├── base.html
│   ├── post_list.html
│   ├── post_detail.html
│   ├── post_form.html
│   └── post_confirm_delete.html
└── migrations/

🔌 API Development

Create a REST API with Django REST Framework:

dj generate api products Product --view-type=api --namespace=v1

Features:

  • ViewSets and Serializers
  • Router-based URL configuration
  • API versioning support
  • Both API and web views

🎛️ Advanced URL Patterns

Generate nested URL structures:

dj generate articles Article --view-type=advanced

Generated URLs:

urlpatterns = [
    path('', views.ArticleListView.as_view(), name='article-list'),
    path('create/', views.ArticleCreateView.as_view(), name='article-create'),
    path('<int:pk>/', include([
        path('', views.ArticleDetailView.as_view(), name='article-detail'),
        path('edit/', views.ArticleUpdateView.as_view(), name='article-update'),
        path('delete/', views.ArticleDeleteView.as_view(), name='article-delete'),
    ])),
    path('search/', views.ArticleSearchView.as_view(), name='article-search'),
    path('export/', views.ArticleExportView.as_view(), name='article-export'),
]

🌐 API Versioning

Create versioned APIs for scalable applications:

# Generate v1 API
dj generate api users User --namespace=api_v1 --view-type=api

# Generate v2 API (in separate app)
dj generate api_v2 users User --namespace=api_v2 --view-type=api

URL Structure:

/api/v1/users/          # api_v1:user-list
/api/v1/users/1/        # api_v1:user-detail
/api/v2/users/          # api_v2:user-list
/api/v2/users/1/        # api_v2:user-detail

🎨 Generated Templates

Django CLI creates beautiful, responsive templates using Bootstrap 5:

📝 List View Template

<!-- Responsive table with search, pagination, and actions -->
<div class="container">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h1>Posts</h1>
        <a href="{% url 'blog:post-create' %}" class="btn btn-primary">
            <i class="fas fa-plus"></i> New Post
        </a>
    </div>
    <!-- ... responsive table with Bootstrap styling ... -->
</div>

📋 Form Template

<!-- Modern form with validation and UX enhancements -->
<form method="post" class="needs-validation" novalidate>
    {% csrf_token %}
    {{ form }}
    <div class="mt-3">
        <button type="submit" class="btn btn-primary">Save</button>
        <a href="{% url 'blog:post-list' %}" class="btn btn-secondary">Cancel</a>
    </div>
</form>

🔧 Command Reference

Project Management

dj init <project_name>              # Create new Django project
dj init-app <app_name>              # Initialize new app

Generation Commands

dj generate <app> <model> [options]

Options:
  --view-type    [function|class|api|advanced]  View type (default: class)
  --namespace    TEXT                           URL namespace for versioning
  --dry-run                                     Preview files without creating
  --no-templates                               Skip HTML template generation
  --help                                        Show help message

URL Management

dj urls create <app_name>           # Create urls.py for an app
dj urls list                         # List apps and their URL status
dj urls check <app_name>            # Check specific app's URLs

Utility Commands

dj list-models [app_name]           # List models in project/app
dj --version                         # Show version information
dj --help                            # Show all available commands

🛠️ Integration

Add to Existing Projects

  1. Install dj-maker in your project environment
  2. Generate new apps directly in your existing project
  3. Update main URLs manually or let dj suggest the integration:
# Add to your main urls.py
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),        # Generated app
    path('api/v1/', include('api.urls')),       # Generated API
]

Settings Integration

Django CLI works with your existing Django settings. For API apps, ensure you have DRF configured:

# settings.py
INSTALLED_APPS = [
    # ... your apps
    'rest_framework',
    'blog',  # Generated app
]

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 20
}

🧪 Quality Assurance

  • 🎯 92% Test Coverage across all modules
  • ✅ 128 Comprehensive Tests covering all functionality
  • 🔒 Type Safety with full mypy support
  • 🚀 Production Ready with comprehensive error handling
  • 📚 Well Documented with extensive examples

Test Coverage by Module:

  • URLs Generator: 100% - Perfect coverage
  • Models Generator: 99% - Near perfect
  • Views Generator: 92% - Excellent
  • Templates Generator: 89% - Very good
  • Main CLI: 89% - Excellent
  • Core Package: 100% - Perfect

🤝 Contributing

We welcome contributions! Here's how to get started:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Run tests: pytest tests/ --cov=src/
  4. Submit a pull request

Development Setup

git clone https://github.com/giacomo/dj-maker.git
cd dj-maker
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest

📋 Requirements

  • Python: 3.10+
  • Django: 4.2, 5.1, 5.2
  • Dependencies: Automatically managed via pip

🗺️ Roadmap

  • Template Customization: Custom template directories
  • Model Field Inference: Smart field type detection
  • Migration Generation: Automatic migration creation
  • Testing Generation: Auto-generate test cases
  • Docker Integration: Container-ready project setup
  • GraphQL Support: Generate GraphQL schemas

🐛 Issues & Support

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Django community for the amazing framework
  • Typer for the excellent CLI framework
  • Rich for beautiful terminal output
  • Jinja2 for powerful templating

About

A lightweight Django project generator for rapid scaffolding of apps, models, and templates. Ideal for developers seeking to streamline Django setup and code generation.

Resources

License

Stars

Watchers

Forks

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载