api-design
FreeREST API设计模式,包括资源命名、状态码、分页、过滤、错误响应、版本控制和生产API的速率限制。
The English summary is being prepared. Showing the original description.
Verification loop for Django projects: migrations, linting, tests with coverage, security scans, and deployment readiness checks before release or PR.
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
在提交 PR 前、发生重大更改后或部署前运行此循环,以确保 Django 应用的质量与安全性。
# 检查 Python 版本
python --version # 应与项目要求一致
# 检查虚拟环境
which python
pip list --outdated
# 检查环境变量
python -c "import os; import environ; print('DJANGO_SECRET_KEY set' if os.environ.get('DJANGO_SECRET_KEY') else 'MISSING: DJANGO_SECRET_KEY')"
如果环境配置错误,请停止并修正。
# 类型检查
mypy . --config-file pyproject.toml
# 使用 ruff 进行 Lint 检查
ruff check . --fix
# 使用 black 进行格式化
black . --check
black . # 自动修正
# 导入语句排序
isort . --check-only
isort . # 自动修正
# Django 特有检查
python manage.py check --deploy
常见问题:
# 检查未应用的迁移
python manage.py showmigrations
# 检查并创建缺失的迁移
python manage.py makemigrations --check
# 模拟迁移运行(Dry-run)
python manage.py migrate --plan
# 应用迁移(测试环境)
python manage.py migrate
# 检查迁移冲突
python manage.py makemigrations --merge # 仅当存在冲突时
报告内容:
# 使用 pytest 运行所有测试
pytest --cov=apps --cov-report=html --cov-report=term-missing --reuse-db
# 运行特定应用的测试
pytest apps/users/tests/
# 按标记运行
pytest -m "not slow" # 跳过耗时较长的测试
pytest -m integration # 仅运行集成测试
# 查看覆盖率报告
open htmlcov/index.html
报告内容:
覆盖率目标:
| 组件 | 目标 |
|---|---|
| 模型 (Models) | 90%+ |
| 序列化器 (Serializers) | 85%+ |
| 视图 (Views) | 80%+ |
| 服务 (Services) | 90%+ |
| 整体 | 80%+ |
# 依赖项脆弱性检查
pip-audit
safety check --full-report
# Django 安全检查
python manage.py check --deploy
# Bandit 安全 Linter
bandit -r . -f json -o bandit-report.json
# 密钥扫描(如果安装了 gitleaks)
gitleaks detect --source . --verbose
# 环境变量检查
python -c "from django.core.exceptions import ImproperlyConfigured; from django.conf import settings; settings.DEBUG"
报告内容:
# 检查模型问题
python manage.py check
# 收集静态文件
python manage.py collectstatic --noinput --clear
# 创建超级用户(如测试需要)
echo "from apps.users.models import User; User.objects.create_superuser('admin@example.com', 'admin')" | python manage.py shell
# 数据库完整性检查
python manage.py check --database default
# 缓存验证(如果使用 Redis)
python -c "from django.core.cache import cache; cache.set('test', 'value', 10); print(cache.get('test'))"
# Django Debug Toolbar 输出(检查 N+1 查询)
# 在开发模式下以 DEBUG=True 运行并访问页面
# 在 SQL 面板中查找重复查询
# 查询数量分析
django-admin debugsqlshell # 如果安装了 django-debug-sqlshell
# 检查缺失的索引
python manage.py shell << EOF
from django.db import connection
with connection.cursor() as cursor:
cursor.execute("SELECT table_name, index_name FROM information_schema.statistics WHERE table_schema = 'public'")
print(cursor.fetchall())
EOF
报告内容:
# 检查 npm 依赖(如果使用 npm)
npm audit
npm audit fix
# 构建静态文件(如果使用 webpack/vite)
npm run build
# 验证静态文件
ls -la staticfiles/
python manage.py findstatic css/style.css
# 在 Python Shell 中运行以验证设置
python manage.py shell << EOF
from django.conf import settings
import os
# 关键检查项
checks = {
'DEBUG is False': not settings.DEBUG,
'SECRET_KEY set': bool(settings.SECRET_KEY and len(settings.SECRET_KEY) > 30),
'ALLOWED_HOSTS set': len(settings.ALLOWED_HOSTS) > 0,
'HTTPS enabled': getattr(settings, 'SECURE_SSL_REDIRECT', False),
'HSTS enabled': getattr(settings, 'SECURE_HSTS_SECONDS', 0) > 0,
'Database configured': settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3',
}
for check, result in checks.items():
status = '✓' if result else '✗'
print(f"{status} {check}")
EOF
# 测试日志输出
python manage.py shell << EOF
import logging
logger = logging.getLogger('django')
logger.warning('Test warning message')
logger.error('Test error message')
EOF
# 检查日志文件(如果已配置)
tail -f /var/log/django/django.log
# 生成 Schema
python manage.py generateschema --format openapi-json > schema.json
# 验证 Schema
# 检查 schema.json 是否为有效的 JSON
python -c "import json; json.load(open('schema.json'))"
# 访问 Swagger UI(如果使用 drf-yasg)
# 在浏览器中访问 http://localhost:8000/swagger/
# 显示差异统计
git diff --stat
# 显示实际更改
git diff
# 显示更改的文件名
git diff --name-only
# 检查常见问题
git diff | grep -i "todo\|fixme\|hack\|xxx"
git diff | grep "print(" # 调试语句
git diff | grep "DEBUG = True" # 调试模式
git diff | grep "import pdb" # 调试器
检查清单:
DJANGO 验证报告
==========================
阶段 1:环境检查
✓ Python 3.11.5
✓ 虚拟环境已激活
✓ 所有环境变量已设置
阶段 2:代码质量
✓ mypy: 无类型错误
✗ ruff: 发现 3 个问题(已自动修正)
✓ black: 无格式问题
✓ isort: 导入语句已正确排序
✓ manage.py check: 无问题
阶段 3:数据库迁移
✓ 无未应用的迁移
✓ 无迁移冲突
✓ 所有模型均有对应迁移
阶段 4:测试 + 覆盖率
测试:247 成功,0 失败,5 跳过
覆盖率:
整体:87%
users: 92%
products: 89%
orders: 85%
payments: 91%
阶段 5:安全扫描
✗ pip-audit: 发现 2 个漏洞(需修复)
✓ safety check: 无问题
✓ bandit: 无安全问题
✓ 未检测到密钥泄露
✓ DEBUG = False
阶段 6:Django 命令
✓ collectstatic 已完成
✓ 数据库完整性 OK
✓ 缓存后端可达
阶段 7:性能
✓ 未检测到 N+1 查询
✓ 数据库索引已配置
✓ 查询数量在许可范围内
阶段 8:静态资源
✓ npm audit: 无漏洞
✓ 资源构建成功
✓ 静态文件已收集
阶段 9:配置
✓ DEBUG = False
✓ SECRET_KEY 已配置
✓ ALLOWED_HOSTS 已设置
✓ HTTPS 已启用
✓ HSTS 已启用
✓ 数据库已配置
阶段 10:日志
✓ 日志系统已配置
✓ 日志文件可写
阶段 11:API 文档
✓ Schema 已生成
✓ Swagger UI 可访问
阶段 12:差异审查
更改文件数:12
+450, -120 行
✓ 无调试语句
✓ 无硬编码密钥
✓ 包含迁移文件
建议:⚠️ 请在部署前修复 pip-audit 发现的漏洞
后续步骤:
1. 更新有漏洞的依赖项
2. 重新运行安全扫描
3. 部署到预发环境(Staging)进行最终测试
# .github/workflows/django-verification.yml
name: Django Verification
on: [push, pull_request]
jobs:
verify:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:14
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Cache pip
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install ruff black mypy pytest pytest-django pytest-cov bandit safety pip-audit
- name: Code quality checks
run: |
ruff check .
black . --check
isort . --check-only
mypy .
- name: Security scan
run: |
bandit -r . -f json -o bandit-report.json
safety check --full-report
pip-audit
- name: Run tests
env:
DATABASE_URL: postgres://postgres:postgres@localhost:5432/test
DJANGO_SECRET_KEY: test-secret-key
run: |
pytest --cov=apps --cov-report=xml --cov-report=term-missing
- name: Upload coverage
uses: codecov/codecov-action@v3
| 检查项 | 命令 |
|---|---|
| 环境 | python --version |
| 类型检查 | mypy . |
| Lint 检查 | ruff check . |
| 格式化 | black . --check |
| 数据库迁移 | python manage.py makemigrations --check |
| 测试 | pytest --cov=apps |
| 安全 | pip-audit && bandit -r . |
| Django 检查 | python manage.py check --deploy |
| 静态文件收集 | python manage.py collectstatic --noinput |
| 差异统计 | git diff --stat |
请记住:自动化验证可以捕获常见问题,但不能替代人工代码审查和在预发环境中的测试。
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
REST API设计模式,包括资源命名、状态码、分页、过滤、错误响应、版本控制和生产API的速率限制。
The English summary is being prepared. Showing the original description.
生产级 API 的 REST API 设计模式,包括资源命名、状态码、分页、过滤、错误响应、版本控制和速率限制。
The English summary is being prepared. Showing the original description.
撰写文章、指南、博客、教程、时事通讯等长篇内容,并根据提供的示例或品牌指南呈现独特的语言风格。当用户需要篇幅超过一段的精炼文字,且重视风格一致性、结构和可信度时,请使用此技能。
The English summary is being prepared. Showing the original description.
编写文章、指南、博客、教程、时事通讯(Newsletter)等长内容,支持从示例或品牌指南中提取独特的语感语调。适用于需要撰写超过一个段落的精炼文本,尤其是对语气一致性、结构和可信度有较高要求时。
The English summary is being prepared. Showing the original description.
编写文章、指南、博客帖子、教程、新闻通讯(newsletter)以及其他长篇内容。这些内容具有从提供的示例或品牌指南中提取出的独特语气。当用户需要比段落更长的精美文案,且对语气一致性、结构和可信度有要求时,请使用此技能(Skill)。
The English summary is being prepared. Showing the original description.
根据提供的示例或品牌指导,以独特的语气撰写文章、指南、博客帖子、教程、新闻简报等长篇内容。当用户需要超过一段的精致书面内容时使用,尤其是当语气一致性、结构和可信度至关重要时。
The English summary is being prepared. Showing the original description.