Django 是 Python 生态最成熟的 Web 框架。 Claude Code 能大幅加速 Django 开发—— 从 Models 到 API,从测试到部署,全流程提效。
Claude Code 在 Django 开发中的优势
强项:
✅ 生成 Models 和对应迁移文件
✅ DRF Serializer/ViewSet 样板代码
✅ 理解整个项目的 Django 结构
✅ ORM 查询优化建议
✅ 自动生成 pytest 测试用例
弱项(需要验证):
⚠️ 复杂业务逻辑(需要你补充上下文)
⚠️ Django 最新版本特性(知识截止日期后的更新)
场景一:从需求直接生成 Models
Prompt:
帮我设计一个博客系统的 Django Models,需求:
- 用户可以发布文章(支持草稿/已发布状态)
- 文章支持分类和多个标签
- 支持评论,评论可以回复(最多二级)
- 记录文章阅读次数
要求:
- 使用 UUID 作为主键
- 自动记录创建和更新时间
- 加适当的 Meta 配置(ordering/indexes)
- 加中文 verbose_name
Claude Code 生成示例:
python
from django.db import models
import uuid
class TimestampMixin(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Category(TimestampMixin):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=50, unique=True, verbose_name='分类名')
slug = models.SlugField(unique=True)
class Meta:
verbose_name = '分类'
ordering = ['name']
class Article(TimestampMixin):
class Status(models.TextChoices):
DRAFT = 'draft', '草稿'
PUBLISHED = 'published', '已发布'
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=200, verbose_name='标题')
content = models.TextField(verbose_name='内容')
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
tags = models.ManyToManyField('Tag', blank=True)
status = models.CharField(max_length=10, choices=Status.choices, default=Status.DRAFT)
view_count = models.PositiveIntegerField(default=0)
class Meta:
verbose_name = '文章'
ordering = ['-created_at']
indexes = [
models.Index(fields=['status', '-created_at']),
]场景二:DRF API 快速生成
基于上面的 Article 模型,生成 DRF 的:
1. ArticleSerializer(列表用精简版,详情用完整版)
2. ArticleViewSet(支持 CRUD,发布操作用单独的 action)
3. URL 路由配置
4. 权限:未登录只读,登录后可创建/编辑自己的文章
场景三:ORM 查询优化
告诉 Claude Code 当前的查询写法,让它诊断 N+1 问题:
这段代码有 N+1 查询问题,帮我优化:
def get_articles_with_comments(self, request):
articles = Article.objects.filter(status='published')
result = []
for article in articles:
result.append({
'title': article.title,
'author': article.author.username, # N+1
'category': article.category.name, # N+1
'comment_count': article.comments.count() # N+1
})
return result
Claude Code 优化方案:
python
articles = Article.objects.filter(
status='published'
).select_related( # 解决 author/category N+1
'author', 'category'
).annotate( # 一次查询获取评论数
comment_count=Count('comments')
)场景四:Celery 异步任务
帮我写一个 Celery 任务:
- 文章发布后发送邮件通知关注者
- 每天凌晨 2 点统计昨天的文章阅读量并写入数据库
- 任务失败时重试 3 次,每次间隔 5 分钟
场景五:pytest-django 测试
给 Article 模型和 API 写完整的 pytest 测试:
- 测试创建/发布/删除文章的 API
- 测试权限(未登录/登录用户/非作者)
- 使用 factory_boy 生成测试数据
Bug 定位 Prompt 技巧
# 粘贴报错信息
这是 Django 的错误堆栈:
[粘贴完整 Traceback]
# 附上相关代码
相关的 View 代码:
[粘贴代码]
# 附上请求信息
请求方式:POST /api/articles/
请求数据:{"title": "test", "content": "..."}
Claude Code 会分析整个调用链,直接指出问题所在。
来源:Anthropic Claude Code 官方文档 - docs.anthropic.com/en/docs/claude-code