mcpField
D
django-expert

django-expert

github.com/farmage开发224284 次安装5 周前更新
代码仓库

关于 django-expert

django-expert 面向构建 Web 应用和 REST API 的 Django 开发者,提供 Django 5.0 与 DRF 实践指导,涵盖模型、接口、安全和测试。

主要功能

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

适用场景

  1. 01设计模型及其关系
  2. 02构建并验证 REST 接口
  3. 03配置身份验证与权限
  4. 04测试 Django 应用

安装

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

$npx skills add https://github.com/farmage/opencode-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、factories

最小可运行示例

下面的代码段展示了核心的 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="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)

约束

必须执行
  • 对关联对象使用 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

文档

评论

支持 Markdown