home / skills / pluginagentmarketplace / custom-plugin-python / django-framework

django-framework skill

/skills/django-framework

This skill helps you build production-ready Django apps quickly by guiding model design, authentication, REST APIs, and deployment best practices.

npx playbooks add skill pluginagentmarketplace/custom-plugin-python --skill django-framework

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
7.4 KB
---
name: Django Framework
description: Build production-ready web applications with Django MVC, ORM, authentication, and REST APIs
version: "2.1.0"
sasmp_version: "1.3.0"
bonded_agent: 02-web-development
bond_type: PRIMARY_BOND

# Skill Configuration
retry_strategy: exponential_backoff
observability:
  logging: true
  metrics: request_latency
---

# Django Framework

## Overview

Master Django, the high-level Python web framework that encourages rapid development and clean, pragmatic design. Learn to build secure, scalable web applications with Django's batteries-included approach.

## Learning Objectives

- Build full-stack web applications using Django MVC pattern
- Design and implement database models with Django ORM
- Implement user authentication and authorization
- Create RESTful APIs with Django REST Framework
- Deploy Django applications to production

## Core Topics

### 1. Django Basics & Project Structure
- Django project setup and configuration
- Understanding MVT (Model-View-Template) pattern
- URL routing and views
- Django settings and environment variables
- Static files and media handling

**Code Example:**
```python
# myapp/views.py
from django.shortcuts import render
from django.http import JsonResponse
from .models import Product

def product_list(request):
    products = Product.objects.all()
    return render(request, 'products/list.html', {'products': products})

def product_api(request):
    products = Product.objects.values('id', 'name', 'price')
    return JsonResponse(list(products), safe=False)
```

### 2. Django ORM & Database Models
- Model definition and field types
- Relationships (ForeignKey, ManyToMany, OneToOne)
- QuerySets and database queries
- Migrations and schema management
- Database optimization (select_related, prefetch_related)

**Code Example:**
```python
# models.py
from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "Categories"

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

# Efficient querying
products = Product.objects.select_related('category', 'created_by').filter(is_active=True)
```

### 3. Authentication & Authorization
- User registration and login
- Password management
- Session management
- Permissions and groups
- Custom user models
- Social authentication

**Code Example:**
```python
# views.py
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import redirect, render

def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('dashboard')
    return render(request, 'login.html')

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

@permission_required('products.add_product')
def add_product(request):
    # Only users with 'add_product' permission can access
    return render(request, 'products/add.html')
```

### 4. Django REST Framework
- Serializers and validation
- ViewSets and routers
- Authentication (JWT, Token)
- Permissions and throttling
- Pagination and filtering

**Code Example:**
```python
# serializers.py
from rest_framework import serializers
from .models import Product, Category

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['id', 'name', 'slug']

class ProductSerializer(serializers.ModelSerializer):
    category = CategorySerializer(read_only=True)
    category_id = serializers.IntegerField(write_only=True)

    class Meta:
        model = Product
        fields = ['id', 'name', 'description', 'price', 'category', 'category_id', 'created_at']

# views.py
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticatedOrReadOnly

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    permission_classes = [IsAuthenticatedOrReadOnly]

    def get_queryset(self):
        queryset = super().get_queryset()
        category = self.request.query_params.get('category')
        if category:
            queryset = queryset.filter(category__slug=category)
        return queryset
```

## Hands-On Practice

### Project 1: Blog Application
Build a full-featured blog with user authentication.

**Requirements:**
- User registration and login
- Create, edit, delete posts
- Comments system
- Categories and tags
- Search functionality
- Admin interface

**Key Skills:** Django models, views, forms, authentication

### Project 2: E-commerce API
Create a RESTful API for an e-commerce platform.

**Requirements:**
- Product catalog with categories
- Shopping cart management
- Order processing
- User authentication with JWT
- API documentation
- Rate limiting

**Key Skills:** Django REST Framework, serializers, authentication

### Project 3: Task Management System
Build a collaborative task management application.

**Requirements:**
- User registration and teams
- Create and assign tasks
- Task status tracking
- File attachments
- Real-time notifications
- Permission-based access

**Key Skills:** Complex models, permissions, file handling

## Assessment Criteria

- [ ] Set up Django projects with proper structure
- [ ] Design normalized database schemas
- [ ] Implement CRUD operations efficiently
- [ ] Secure applications with authentication
- [ ] Build RESTful APIs following best practices
- [ ] Write Django tests (unit and integration)
- [ ] Deploy to production environment

## Resources

### Official Documentation
- [Django Docs](https://docs.djangoproject.com/) - Official documentation
- [Django REST Framework](https://www.django-rest-framework.org/) - DRF documentation
- [Django Girls Tutorial](https://tutorial.djangogirls.org/) - Beginner-friendly

### Learning Platforms
- [Django for Beginners](https://djangoforbeginners.com/) - Book and tutorials
- [Two Scoops of Django](https://www.feldroy.com/books/two-scoops-of-django-3-x) - Best practices
- [TestDriven.io](https://testdriven.io/) - Django with TDD

### Tools
- [Django Debug Toolbar](https://django-debug-toolbar.readthedocs.io/) - Debugging
- [django-extensions](https://django-extensions.readthedocs.io/) - Useful utilities
- [Celery](https://docs.celeryproject.org/) - Async tasks
- [PostgreSQL](https://www.postgresql.org/) - Recommended database

## Next Steps

After mastering Django, explore:
- **FastAPI** - Modern, fast web framework
- **Celery** - Asynchronous task queue
- **Docker** - Containerization for deployment
- **AWS/Heroku** - Cloud deployment platforms

Overview

This skill teaches building production-ready web applications using the Django framework. You will learn core Django patterns (MVT/MVC), the ORM, authentication, and creating RESTful APIs with Django REST Framework to deliver secure, scalable apps.

How this skill works

The skill guides you through project setup, model design, and efficient querying using Django ORM. It covers authentication and authorization flows, serializers and viewsets for APIs, and deployment considerations for production workloads.

When to use it

  • When you need a batteries-included Python web framework for rapid development
  • When building data-driven web apps with complex models and relationships
  • When you require built-in admin, authentication, and permission controls
  • When exposing RESTful APIs for frontend apps or mobile clients
  • When preparing applications for production deployments and scaling

Best practices

  • Structure projects with clear apps and environment-specific settings
  • Use migrations and database indexing; optimize queries with select_related/prefetch_related
  • Prefer custom user models early to avoid future migration pain
  • Protect endpoints with proper permissions and secure authentication (JWT/Token where appropriate)
  • Write unit and integration tests for models, views, and serializers before deployment

Example use cases

  • Full-featured blog with user accounts, posts, comments, and admin management
  • E-commerce API serving product catalogs, carts, orders, and JWT authentication
  • Task management system with teams, task assignments, file attachments, and role-based access
  • Backend for single-page applications or mobile apps using DRF viewsets and pagination
  • Data-heavy dashboards where optimized ORM queries and caching improve performance

FAQ

Do I need to learn Django REST Framework separately?

DRF is covered as part of the skill; learn serializers, viewsets, routers, and API authentication to build production APIs.

When should I use a custom user model?

Create a custom user model at project start if you expect custom fields or authentication flows—changing later is complex.