본문으로 건너뛰기
cccskills
무료GitHub에 공개

django-patterns

Django architecture patterns including DRF, ORM optimization, signals, middleware, and project structure

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md4.1 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

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.py instead of environment variables
  • Running raw SQL without parameterized queries

Checklist

  • Business logic lives in services/selectors, not views
  • All list queries use select_related or prefetch_related where needed
  • Serializers validate input data with custom validate methods
  • 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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Web accessibility patterns for WCAG 2.2 compliance including ARIA, keyboard navigation, screen readers, and testing

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rohitg00/awesome-claude-code-toolkit2.7천2026년 5월 12일 업데이트

Route broad or ambiguous AgentKit SEO work to the right module while keeping context scoped. Use when a request spans multiple surfaces, asks for overall digital-presence strategy, involves provider or install architecture, needs agent-context planning, or the correct platform skill is unclear.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rohitg00/awesome-claude-code-toolkit2.7천2026년 5월 12일 업데이트

REST API design with resource naming, pagination, versioning, and OpenAPI spec generation

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rohitg00/awesome-claude-code-toolkit2.7천2026년 5월 12일 업데이트

Authentication and authorization patterns including OAuth2, JWT, RBAC, session management, and PKCE flows

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rohitg00/awesome-claude-code-toolkit2.7천2026년 5월 12일 업데이트

AWS cloud patterns for Lambda, ECS, S3, DynamoDB, and Infrastructure as Code with CDK/Terraform

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rohitg00/awesome-claude-code-toolkit2.7천2026년 5월 12일 업데이트

CI/CD pipeline patterns for GitHub Actions, GitLab CI, testing strategies, and deployment automation

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rohitg00/awesome-claude-code-toolkit2.7천2026년 5월 12일 업데이트

rohitg00의 스킬 모두 보기

이 스킬의 문제 신고