Django Pro
构建生产就绪的 Django 应用程序
Django 开发者常常在复杂的架构决策和现代 Django 5.x 特性方面遇到困难。本技能提供关于异步视图、DRF、Celery 和可扩展模式的专业指导,帮助构建可维护的 Web 应用程序。
스킬 ZIP 다운로드
Claude에서 업로드
설정 → 기능 → 스킬 → 스킬 업로드로 이동
토글을 켜고 사용 시작
테스트해 보기
"Django Pro" 사용 중입니다. 优化获取作者及其文章和评论的 queryset
예상 결과:
使用 select_related 和 prefetch_related 消除 N+1 查询:
Author.objects.select_related('profile').prefetch_related(
'posts',
'posts__comments',
'posts__tags'
).annotate(
post_count=Count('posts', distinct=True),
comment_count=Count('posts__comments', distinct=True)
)
这将数据库查询从 1 + N + (N*M) 减少到仅 3 个查询。
"Django Pro" 사용 중입니다. 创建用于对象级访问的自定义权限类
예상 결과:
对象级权限,仅允许作者编辑其文章:
class IsAuthorOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.author == request.user
应用于 ModelViewSet,设置 permission_classes = [IsAuthenticated, IsAuthorOrReadOnly]
보안 감사
안전This is a prompt-only instructional skill with no executable code. Static analysis scanned 0 files and detected 0 security issues with a risk score of 0/100. The skill provides Django development guidance and best practices without any code execution, network access, or file system operations. Safe for publication.
품질 점수
만들 수 있는 것
企业级 Django 架构
设计可扩展的多租户 SaaS 应用程序,采用适当的服务层模式、仓库抽象和环境特定配置。
使用 DRF 进行 API 开发
使用 Django REST Framework 实现具有 JWT 身份验证、自定义权限、viewsets 和全面 API 文档的 RESTful API。
性能优化
识别和解决 N+1 查询问题,实现数据库索引策略,并为高流量 Django 应用程序配置缓存层。
이 프롬프트를 사용해 보세요
创建一个博客文章 Django 模型,包含标题、内容、作者、标签和发布日期。包括适当的索引、用于已发布文章的自定义管理器,以及 __str__ 方法。遵循 Django 5.x 约定。
构建一个用于用户注册的 Django REST Framework API 端点,包含电子邮件验证。包括带有验证的序列化器、viewset、JWT 令牌生成,以及使用 Celery 排队的电子邮件发送任务。
将此同步 Django 视图转换为异步视图,并发地从三个外部 API 获取数据。使用 asyncio.gather,添加适当的错误处理,并为每个请求实现超时限制。
使用 Django Channels 实现 WebSocket 消费者,用于实时聊天功能。包括连接处理、向房间组广播消息、数据库消息持久化,以及 Redis 通道层配置。
모범 사례
- 在添加第三方包之前先使用 Django 的内置功能,以减少依赖和维护负担
- 在模型中实现数据库级约束以及应用级验证,以确保数据完整性
- 在多个级别编写测试:针对模型和工具类的单元测试,针对视图和 API 的集成测试,针对关键用户流程的端到端测试
피하기
- 将业务逻辑放在视图或模板中,而不是使用服务层来实现关注点分离
- 在循环中使用 filter() 而不是批量操作或正确连接的查询,导致 N+1 查询问题
- 将机密信息存储在 settings.py 中,而不是使用带有 django-environ 或类似包的环境变量