django-patterns
Django architecture patterns including DRF, ORM optimization, signals, middleware, and project structure
How do I install this agent skill?
npx skills add https://github.com/rohitg00/awesome-claude-code-toolkit --skill django-patternsIs this agent skill safe to install?
- Gen Agent Trust Hubpass
No security issues detected. The skill provides standard architectural patterns, optimization techniques, and best practices for Django development.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerpass
1 file scanned · No issues
What does this agent skill do?
Django Patterns
Project Structure
Organize Django projects with a clear separation between apps, shared utilities, and configuration.
project/
config/
settings/
base.py
local.py
production.py
urls.py
wsgi.py
apps/
users/
models.py
serializers.py
views.py
services.py
selectors.py
urls.py
tests/
orders/
...
common/
models.py
permissions.py
pagination.py
Keep business logic in services.py (write operations) and selectors.py (read operations). Views should remain thin.
ORM Optimization
# select_related for ForeignKey / OneToOne (SQL JOIN)
orders = Order.objects.select_related("customer", "customer__profile").all()
# prefetch_related for ManyToMany / reverse FK (separate query)
authors = Author.objects.prefetch_related(
Prefetch("books", queryset=Book.objects.filter(published=True))
).all()
# Defer fields you don't need
posts = Post.objects.defer("body", "metadata").filter(status="published")
# Use .only() when you need just a few columns
emails = User.objects.only("id", "email").filter(is_active=True)
# Bulk operations
Product.objects.bulk_create(products, batch_size=1000)
Product.objects.bulk_update(products, ["price", "stock"], batch_size=1000)
Always check queries with django-debug-toolbar or connection.queries in tests.
Django REST Framework Serializers
class OrderSerializer(serializers.ModelSerializer):
customer_name = serializers.CharField(source="customer.full_name", read_only=True)
items = OrderItemSerializer(many=True, read_only=True)
total = serializers.SerializerMethodField()
class Meta:
model = Order
fields = ["id", "customer_name", "items", "total", "created_at"]
read_only_fields = ["id", "created_at"]
def get_total(self, obj):
return sum(item.price * item.quantity for item in obj.items.all())
def validate(self, data):
if data.get("start_date") and data.get("end_date"):
if data["start_date"] >= data["end_date"]:
raise serializers.ValidationError("end_date must be after start_date")
return data
Signals
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Order)
def order_created_handler(sender, instance, created, **kwargs):
if created:
send_order_confirmation.delay(instance.id)
update_inventory.delay(instance.id)
Prefer signals for cross-app side effects. For same-app logic, call services directly.
Custom Middleware
import time
import logging
logger = logging.getLogger(__name__)
class RequestTimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start = time.monotonic()
response = self.get_response(request)
duration = time.monotonic() - start
logger.info(f"{request.method} {request.path} {response.status_code} {duration:.3f}s")
return response
Anti-Patterns
- Putting business logic in views or serializers instead of service layers
- Using
Model.objects.all()without pagination in list endpoints - N+1 queries from missing
select_related/prefetch_related - Overusing signals for same-app logic (makes flow hard to trace)
- Storing secrets in
settings.pyinstead of environment variables - Running raw SQL without parameterized queries
Checklist
- Business logic lives in services/selectors, not views
- All list queries use
select_relatedorprefetch_relatedwhere needed - Serializers validate input data with custom
validatemethods - Settings split into base/local/production modules
- Migrations are reviewed before merging
- Bulk operations used for batch inserts/updates
- Custom middleware follows the WSGI callable pattern
- Tests cover model constraints, serializer validation, and view permissions
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/rohitg00/awesome-claude-code-toolkit/django-patterns">View django-patterns on skillZs</a>