用途
Django 验证循环(Django Verification Loop)面向 Django 应用,用于在提交 Pull Request 前、重大模型变更、迁移更新或依赖升级后,以及预发布(Staging)与生产部署前执行,以保障应用的质量与安全性。
何时启用
- 为 Django 项目提交 Pull Request 前
- 重大模型变更、迁移更新或依赖升级后
- 预发布或生产环境部署前的验证
执行完整的「环境检查 → 代码检查 → 测试 → 安全扫描 → 部署就绪」流水线,并验证迁移安全性及测试覆盖率。
主要阶段与能力
- 环境检查:验证 Python 版本、虚拟环境(which python、pip list --outdated)与环境变量(如 DJANGO_SECRET_KEY 是否设置)。若环境配置错误应停止并修复。
- 代码质量与格式化:mypy 类型检查、ruff Lint(可 --fix)、black 格式检查、isort 导入排序、python manage.py check --deploy;常见问题包括缺失类型提示、PEP 8 违规、导入未排序、生产配置残留调试设置。
- 数据库迁移:showmigrations、makemigrations --check、migrate --plan 预演、migrate 应用、makemigrations --merge(仅在冲突时);报告待处理迁移数量、迁移冲突、模型变更未生成迁移文件。
- 测试与覆盖率:pytest --cov 生成 HTML 与终端缺口报告(--reuse-db),可按应用或标记运行(如 -m "not slow"、-m integration);覆盖率目标:模型 90%+、序列化器 85%+、视图 80%+、服务 90%+、总体 80%+。
- 安全扫描:pip-audit、safety check、check --deploy、bandit(JSON 报告)、gitleaks 密钥扫描、检查 DEBUG 状态(生产应为 False)。报告漏洞依赖、安全配置问题、硬编码密钥与 DEBUG 状态。
- Django 管理命令:check、collectstatic --noinput --clear、创建超级用户(如需要)、check --database default、缓存读写验证。
- 性能检查:Debug Toolbar 检查 N+1 查询、查询计数分析、通过 information_schema.statistics 检查缺失索引;报告每页查询数量(典型页面应 < 50)、缺失索引、重复查询。
- 静态资源:npm audit、npm run build、验证 staticfiles 目录与 findstatic。
- 配置审查:在 shell 中校验 DEBUG 为 False、SECRET_KEY 长度、ALLOWED_HOSTS、HTTPS、HSTS、数据库非 sqlite 等关键项。
- 日志配置:测试日志输出、检查日志文件。
- API 文档(如使用 DRF):generateschema 生成 openapi-json、校验 JSON、访问 Swagger UI。
- 差异审查:git diff --stat / --name-only,检索 todo、fixme、hack、print(、DEBUG = True、import pdb 等;检查无调试语句、无硬编码密钥、模型变更包含迁移文件、配置变更已记录、外部调用有错误处理、关键位置有事务管理。
最终输出为结构化的 Django 验证报告(逐阶段 ✓/✗ 与建议、后续步骤)及部署前检查清单,并给出 GitHub Actions 持续集成示例配置。
使用方式
按上述阶段顺序执行相应命令:环境检查、mypy/ruff/black/isort、manage.py 迁移相关命令、pytest 覆盖率、pip-audit/safety/bandit/gitleaks、manage.py check/collectstatic、性能与配置审查脚本、日志与 API 文档命令、git diff 审查。可参考「快速参考」表中各检查项与命令的对应关系,并通过 GitHub Actions 工作流在 push 与 pull_request 时自动执行。
适用场景
Django 项目在 PR 提交前、模型/迁移/依赖变更后、预发布与生产部署前的自动化质量与安全验证,以及作为 CI 中的验证任务。
限制与注意
- 自动化验证可以捕捉常见问题,但不能取代人工代码审查和在预发布环境中的手动测试。
- 部分命令依赖对应工具已安装(如 ruff、black、mypy、pytest-django、bandit、safety、pip-audit、gitleaks、django-debug-toolbar 等);是否可用取决于项目实际环境。
- 文中涉及的具体工具、命令与配置示例以资料描述为准;关于该技能的具体实现方式、安装方法与收费等信息,资料中暂未提供。