5.3 KiB
5.3 KiB
代码审查清单
概述
代码审查(Code Review)是保障代码质量的重要环节。本文提供标准化的审查清单,覆盖安全、性能、规范、边界等维度,帮助审查者系统性地检查代码质量。
:::tip 审查原则
- 每次提交必须经过至少一人审查
- 审查关注点:正确性 > 安全性 > 可维护性 > 性能
- 审查意见应具体、可操作,避免主观评价 :::
安全检查
- DEBUG 关闭:生产配置
DJANGO_DEBUG=False - JWT 安全:
JWT_SALT使用强密码,未硬编码在代码中 - CORS 配置:未使用
CORS_ALLOW_ORIGINS = ['*'],仅列出信任域名 - SQL 注入:使用 Django ORM 参数化查询,禁止字符串拼接 SQL
- 权限校验:写操作接口有
PermissionRequiredmixin 和DJANGO_DEMO检查 - 敏感信息:日志中不记录密码、token、密钥等敏感信息
- 文件上传:有文件类型白名单验证,文件名已重命名
- 输入校验:所有用户输入通过 Django Form 校验
- .env 安全:
.env文件未提交到 Git(在.gitignore中) - 密码存储:使用
make_password/check_password哈希存储,禁止明文
性能检查
- N+1 查询:关联查询使用
select_related/prefetch_related,避免循环查询 - 索引覆盖:WHERE/ORDER BY 字段已添加索引(
db_index=True) - 分页查询:大列表接口使用 Django Paginator,禁止全表查询返回
- **SELECT ***:只查询需要的字段,避免
SELECT * - 缓存使用:热点数据使用 Redis 缓存(
django_redis) - 批量操作:批量插入/更新使用
bulk_create/update,非逐条执行 - 连接池:数据库连接池大小合理,不超过数据库 max_connections
代码规范检查
- 装饰器顺序:
@method_decorator(check_login)→PermissionRequired→@operation_log - 命名规范:文件名 snake_case,类名 PascalCase,函数名 snake_case
- 注释规范:关键逻辑有注释说明,docstring 描述函数用途
- 导入规范:导入分组(标准库 → 第三方 → 本地模块),无未使用的导入
- R 封装:所有接口通过
R.ok()/R.failed()返回,禁止直接返回 dict - 删除规范:使用
is_delete=True软删除,禁止物理删除 - 查询过滤:所有查询加
is_delete=False条件
边界条件检查
- 空值处理:可选字段支持 None 值,不抛异常
- 空列表:批量操作传入空列表时安全返回
- 超大输入:字符串长度限制合理(
max_length) - 数值范围:数值字段有
min_value/max_value约束 - ID 有效性:ID 参数校验 > 0,兼容字符串 ID
- 重复操作:重复添加/删除同一数据的幂等性
- 并发安全:并发修改同一记录的处理(乐观锁/唯一性校验)
- 软删除过滤:查询方法自动过滤
is_delete=False
数据库检查
- 模型定义:继承
BaseModel(application/models.py) - 表名前缀:
db_table = get_table_name('表名') - 字段注释:
db_comment参数描述字段用途 - 索引定义:常用查询字段有索引(
db_index=True) - 默认值:
db_default与数据库默认值一致 - 软删除:不使用物理删除,统一软删除(
is_delete)
API 接口检查
- HTTP 方法:查询用 GET,新增用 POST,编辑用 PUT,删除用 DELETE
- 权限标识:格式
sys:{module}:{action} - 请求参数:Django Form 定义完整约束和中文错误提示
- 响应格式:统一使用
R.ok()/R.failed() - 错误提示:错误消息清晰、用户友好(中文)
- 路由注册:新模块已在
application/urls.py中注册
前端检查
- API 函数命名:
getXxxPage/addXxx/updateXxx/deleteXxx - 错误处理:响应拦截器统一处理错误
- loading 状态:数据加载时显示 loading
- 确认弹窗:删除操作有二次确认
- 表单校验:提交前前端校验必填项
提交检查
- 提交信息:遵循 Conventional Commits 格式
- 变更范围:每次提交只做一件事
- 测试覆盖:新功能/修复有对应测试
- 文档更新:接口变更同步更新文档
审查意见模板
[严重] 安全问题:SQL 拼接存在注入风险,应使用 Django ORM 参数化查询
[建议] 性能优化:此处可用 select_related 避免 N+1 查询
[疑问] 这里的 try-except 吞掉了异常,是否需要记录日志?
[肯定] 使用 R.ok() 统一封装响应,符合规范
:::tip 审查态度
- 区分「必须修改」和「建议优化」
- 给出具体的修改方案,而非只指出问题
- 对好的实践给予肯定 :::
总结
代码审查清单覆盖安全、性能、规范、边界、数据库、API、前端、提交等 8 个维度。审查时按清单逐项检查,区分严重问题和建议优化。核心关注点:权限校验是否完整、SQL 是否安全、响应格式是否统一、软删除是否正确。审查意见应具体可操作,帮助团队持续提升代码质量。