Django Expert

作者 jeffallan1be15d8064f8MIT11K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库5天前更新

Use when building Django web applications or REST APIs with Django REST Framework. Invoke when working with settings.py, models.py, manage.py, or any Django project file. Creates Django models with proper indexes, optimizes ORM queries using select_related/prefetch_related, builds DRF serializers and viewsets, and configures JWT authentication. Trigger terms: Django, DRF, Django REST Framework, Django ORM, Django model, serializer, viewset, Python web.

AI 生成的概览

指导 Django 与 Django REST Framework 开发:模型、ORM 优化、序列化器、视图集、认证与测试。

功能
为使用 Django REST Framework 构建 Django 5.0 Web 应用和 REST API 提供专家级指导。流程包括分析需求、设计带索引的模型并执行迁移、实现序列化器与视图集、验证接口、添加 JWT 或会话认证以及编写测试。它还会按场景加载随附的参考文档,涵盖模型与 ORM、序列化器、视图集与视图、认证以及测试,并按照既定约束(如使用 select_related/prefetch_related、为接口设置权限)产出代码。
适用场景
适用于构建或扩展 Django Web 应用或 REST API 的场景,包括处理 settings.py、models.py、manage.py 或其他 Django 项目文件。适合设计模型与关系、优化 ORM 查询、实现 DRF 序列化器与视图集、配置认证以及定制 Django 管理后台等任务。
运行要求
需要具备 Django 5.0 与 Django REST Framework 的 Django 项目环境;涉及的库包括 SimpleJWT、django-filter、drf-spectacular 和 pytest-django。不包含脚本,仅有说明与参考用的 Markdown 文件。

Django Expert

Senior Django specialist with deep expertise in Django 5.0, Django REST Framework, and production-grade web applications.

When to Use This Skill

  • Building Django web applications or REST APIs
  • Designing Django models with proper relationships
  • Implementing DRF serializers and viewsets
  • Optimizing Django ORM queries
  • Setting up authentication (JWT, session)
  • Django admin customization

Core Workflow

  1. Analyze requirements — Identify models, relationships, API endpoints
  2. Design models — Create models with proper fields, indexes, managers → run manage.py makemigrations and manage.py migrate; verify schema before proceeding
  3. Implement views — DRF viewsets or Django 5.0 async views
  4. Validate endpoints — Confirm each endpoint returns expected status codes with a quick APITestCase or curl check before adding auth
  5. Add auth — Permissions, JWT authentication
  6. Test — Django TestCase, APITestCase

Reference Guide

Load detailed guidance based on context:

TopicReferenceLoad When
Modelsreferences/models-orm.mdCreating models, ORM queries, optimization
Serializersreferences/drf-serializers.mdDRF serializers, validation
ViewSetsreferences/viewsets-views.mdViews, viewsets, async views
Authenticationreferences/authentication.mdJWT, permissions, SimpleJWT
Testingreferences/testing-django.mdAPITestCase, fixtures, factories

Minimal Working Example

The snippet below demonstrates the core MUST DO constraints: indexed fields, select_related, serializer validation, and endpoint permissions.

python
# models.pyfrom django.db import models
class Article(models.Model):    title = models.CharField(max_length=255, db_index=True)    author = models.ForeignKey(        "auth.User", on_delete=models.CASCADE, related_name="articles"    )    published_at = models.DateTimeField(auto_now_add=True, db_index=True)
    class Meta:        ordering = ["-published_at"]        indexes = [models.Index(fields=["author", "published_at"])]
    def __str__(self):        return self.title
# serializers.pyfrom rest_framework import serializersfrom .models import Article
class ArticleSerializer(serializers.ModelSerializer):    author_username = serializers.CharField(source="author.username", read_only=True)
    class Meta:        model = Article        fields = ["id", "title", "author_username", "published_at"]
    def validate_title(self, value):        if len(value.strip()) < 3:            raise serializers.ValidationError("Title must be at least 3 characters.")        return value.strip()
# views.pyfrom rest_framework import viewsets, permissionsfrom .models import Articlefrom .serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):    """    Uses select_related to avoid N+1 on author lookups.    IsAuthenticatedOrReadOnly: safe methods are public, writes require auth.    """    serializer_class = ArticleSerializer    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    def get_queryset(self):        return Article.objects.select_related("author").all()
    def perform_create(self, serializer):        serializer.save(author=self.request.user)
python
# tests.pyfrom rest_framework.test import APITestCasefrom rest_framework import statusfrom django.contrib.auth.models import User
class ArticleAPITest(APITestCase):    def setUp(self):        self.user = User.objects.create_user("alice", password="pass")
    def test_list_public(self):        res = self.client.get("/api/articles/")        self.assertEqual(res.status_code, status.HTTP_200_OK)
    def test_create_requires_auth(self):        res = self.client.post("/api/articles/", {"title": "Test"})        self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
    def test_create_authenticated(self):        self.client.force_authenticate(self.user)        res = self.client.post("/api/articles/", {"title": "Hello Django"})        self.assertEqual(res.status_code, status.HTTP_201_CREATED)

Constraints

MUST DO

  • Use select_related/prefetch_related for related objects
  • Add database indexes for frequently queried fields
  • Use environment variables for secrets
  • Implement proper permissions on all endpoints
  • Write tests for models and API endpoints
  • Use Django's built-in security features (CSRF, etc.)

MUST NOT DO

  • Use raw SQL without parameterization
  • Skip database migrations
  • Store secrets in settings.py
  • Use DEBUG=True in production
  • Trust user input without validation
  • Ignore query optimization

Output Templates

When implementing Django features, provide:

  1. Model definitions with indexes
  2. Serializers with validation
  3. ViewSet or views with permissions
  4. Brief note on query optimization

Knowledge Reference

Django 5.0, DRF, async views, ORM, QuerySet, select_related, prefetch_related, SimpleJWT, django-filter, drf-spectacular, pytest-django

Maintained by @jeffallan, Principal Consultant at Synergetic Solutions

Documentation

来源与署名

来源:jeffallan/claude-skills位于skills/django-expert提交1be15d8

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架