Skip to content

代码审查清单

概述

代码审查(Code Review)是保障代码质量的重要环节。本文提供标准化的审查清单,覆盖安全、性能、规范、边界等维度,帮助审查者系统性地检查代码质量。

审查原则

  • 每次提交必须经过至少一人审查
  • 审查关注点:正确性 > 安全性 > 可维护性 > 性能
  • 审查意见应具体、可操作,避免主观评价

安全检查

  • [ ] DEBUG 关闭:生产配置 DJANGO_DEBUG=False
  • [ ] JWT 安全JWT_SALT 使用强密码,未硬编码在代码中
  • [ ] CORS 配置:未使用 CORS_ALLOW_ORIGINS = ['*'],仅列出信任域名
  • [ ] SQL 注入:使用 Django ORM 参数化查询,禁止字符串拼接 SQL
  • [ ] 权限校验:写操作接口有 PermissionRequired mixin 和 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

数据库检查

  • [ ] 模型定义:继承 BaseModelapplication/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() 统一封装响应,符合规范

审查态度

  • 区分「必须修改」和「建议优化」
  • 给出具体的修改方案,而非只指出问题
  • 对好的实践给予肯定

总结

代码审查清单覆盖安全、性能、规范、边界、数据库、API、前端、提交等 8 个维度。审查时按清单逐项检查,区分严重问题和建议优化。核心关注点:权限校验是否完整、SQL 是否安全、响应格式是否统一、软删除是否正确。审查意见应具体可操作,帮助团队持续提升代码质量。

小蚂蚁云团队 · 提供技术支持