mcpField
D
django-expert

django-expert

github.com/jeffallan开发12.1k4.3k 次安装1 天前更新
代码仓库

关于 django-expert

面向 Django Web 应用和 REST API 开发的技能,涵盖 Django 5.0 与 Django REST Framework,并提供从模型设计到安全和测试的开发指导。

主要功能

  1. 01Django 模型与 ORM 指导
  2. 02DRF 序列化器和视图集
  3. 03认证与权限设置
  4. 04查询优化与索引
  5. 05使用 Django 和 DRF 测试

适用场景

  1. 01设计模型及其关系
  2. 02实现 REST API 端点
  3. 03优化关联对象查询
  4. 04配置认证和端点权限

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill django-expert

安装后在 Claude Code 中输入/django-expert确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
authentication.md
drf-serializers.md
models-orm.md
testing-django.md
viewsets-views.md

详细介绍

Django 专家

资深 Django 专家,精通 Django 5.0、Django REST Framework 和生产级 Web 应用。

何时使用此技能

  • 构建 Django Web 应用或 REST API
  • 设计具有恰当关系的 Django 模型
  • 实现 DRF 序列化器和视图集
  • 优化 Django ORM 查询
  • 配置身份验证(JWT、会话)
  • 自定义 Django 管理后台

核心工作流

  1. 分析需求 — 确定模型、关系和 API 端点
  2. 设计模型 — 创建包含恰当字段、索引和管理器的模型 → 运行 manage.py makemigrations 和 manage.py migrate;验证架构后再继续
  3. 实现视图 — 使用 DRF 视图集或 Django 5.0 异步视图
  4. 验证端点 — 添加身份验证前,使用快速的 APITestCase 或 curl 检查,确认每个端点都返回预期的状态码
  5. 添加身份验证 — 权限、JWT 身份验证
  6. 测试 — Django TestCase、APITestCase

参考指南

根据上下文加载详细指南:

主题参考文档加载时机
模型references/models-orm.md创建模型、ORM 查询、优化
序列化器references/drf-serializers.mdDRF 序列化器、验证
视图集references/viewsets-views.md视图、视图集、异步视图
身份验证references/authentication.mdJWT、权限、SimpleJWT
测试references/testing-django.mdAPITestCase、fixtures、工厂

最小可运行示例

以下代码片段展示了核心的 MUST DO 约束:索引字段、select_related、序列化器验证和端点权限。

# models.py
from 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.py
from rest_framework import serializers
from .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.py
from rest_framework import viewsets, permissions
from .models import Article
from .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)
# tests.py
from rest_framework.test import APITestCase
from rest_framework import status
from django.contrib.auth.models import User

class ArticleAPITest(APITestCase):
    def setUp(self):
        self.user = User.objects.create_user("alice", password="<test-password>")

    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)

约束

必须做到
  • 对关联对象使用 select_related/prefetch_related
  • 为频繁查询的字段添加数据库索引
  • 使用环境变量存储密钥
  • 为所有端点实现恰当的权限控制
  • 为模型和 API 端点编写测试
  • 使用 Django 内置的安全功能(CSRF 等)
绝不能做
  • 不使用参数化就执行原始 SQL
  • 跳过数据库迁移
  • 在 settings.py 中存储密钥
  • 在生产环境中使用 DEBUG=True
  • 未经验证就信任用户输入
  • 忽视查询优化

输出模板

实现 Django 功能时,请提供:

  1. 带索引的模型定义
  2. 带验证的序列化器
  3. 带权限控制的视图集或视图
  4. 关于查询优化的简短说明

知识参考

Django 5.0、DRF、异步视图、ORM、QuerySet、select_related、prefetch_related、SimpleJWT、django-filter、drf-spectacular、pytest-django

由 @jeffallan 维护;他是 Synergetic Solutions 的首席顾问

文档

评论

支持 Markdown