Files
djangoadmin-wiki/DjangoAdmin_Flask_AntdVue/zh/volume7/doc-standard.md
T
2026-09-12 23:12:15 +08:00

172 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 文档规范
## 概述
良好的文档是项目可维护性的基石。本文规范 API 文档、WTForms 文档、代码注释等文档的编写标准。
:::tip 文档原则
- 文档与代码同步更新
- 使用中文编写(项目约定)
- 示例代码可直接运行
:::
## API 接口文档
建议使用 Postman 或 Apifox 等工具维护 API 文档。
### Router 文档注释
```python
@position_blue.route('/add', methods=['POST'])
@check_permission('sys:position:add')
def add():
"""
新增岗位
请求参数:
- name: 岗位名称(必填,1-150字符)
- status: 岗位状态(必填,1-在用 2-停用)
- sort: 岗位排序(必填,0-99999)
:return: 添加结果响应
"""
from src.modules.system.position.service import add_position
from src.modules.system.position.schema import PositionForm
data = parse_request_body(request, PositionForm)
return add_position(data)
```
:::tip 文档层级
- 函数名:简短标题
- docstring:详细描述(请求参数、返回值)
- WTForms 字段:字段级描述
:::
## WTForms 文档
WTForms 表单通过字段的 label 参数和 validator 的 message 参数提供文档信息:
```python
class PositionForm(BaseForm):
"""岗位创建/编辑表单"""
name = StringField('岗位名称', validators=[
DataRequired(message='岗位名称不能为空'),
Length(min=1, max=150, message='岗位名称长度必须在1-150个字符之间')
])
status = IntegerField('岗位状态', validators=[
DataRequired(message='岗位状态不能为空'),
NumberRange(min=1, max=2, message='岗位状态必须是1或2')
])
sort = IntegerField('岗位排序', validators=[
DataRequired(message='岗位排序不能为空'),
NumberRange(min=0, max=99999, message='岗位排序必须在0-99999之间')
])
```
:::tip 文档规范
- label:字段中文名,用于前端显示
- message:校验失败提示,用于返回给用户
- 枚举值说明使用 `值-含义` 格式(如 `1-在用 2-停用`)
- 有约束条件时在 message 中说明(如 `1-150字符`)
:::
## 代码注释规范
### 文件头注释
```python
# +======================================================================
# | 模块: 岗位业务逻辑层
# | 说明: 岗位的增删改查、唯一性校验、状态管理等业务处理
# +======================================================================
```
### 类注释
```python
class PositionService(BaseService):
"""岗位业务服务类,继承基础服务获得通用 CRUD 能力"""
```
### 方法注释
```python
@classmethod
def before_delete(cls, ids):
"""
删除前校验:存在用户引用该岗位时禁止删除
Args:
ids: 待删除的岗位ID列表
Raises:
BizError: 岗位被用户引用时抛出
"""
for pid in ids:
if UserRepository.count_by({'position_id': pid}) > 0:
raise BizError(f"岗位ID {pid} 已被用户引用,无法删除")
```
### 行内注释
```python
# 自动软删过滤,调用方无需关心 is_delete
query = query.filter(cls.model.is_delete == 0)
```
:::tip 注释原则
- 解释"为什么"而非"是什么"
- 复杂逻辑必须注释
- 简单代码无需注释
- 注释与代码同步更新
:::
## 文档目录结构
```
document/ # 补充文档
├── 数据库迁移_runbook.md # 数据库迁移操作手册
└── djangoadmin.flask.elevue.sql # 数据库结构 SQL
wiki/ # VitePress 文档站
├── zh/ # 中文文档
│ ├── 1. 了解项目/ # why.md, struct.md, course.md
│ ├── 2. 快速入门/ # volume1/(环境、启动、数据库、Docker)
│ ├── 3. 模块开发实战/ # volume2/(Model→Schema→Repo→Service→Router→前端)
│ ├── 4. 架构设计/ # volume3/(分层、基类、缓存、安全)
│ ├── 5. 开发指南/ # volume4/
│ │ ├── 5.1 后端核心功能/ # core/(JWT、RBAC、字典、日志、限流、事务)
│ │ ├── 5.2 后端业务模块/ # business/(用户、角色、菜单、文章、任务)
│ │ ├── 5.3 后端通用工具/ # tools/(上传、Excel、IP/UA、密码、富文本)
│ │ ├── 5.4 前端开发/ # frontend/(组件、路由、Store、构建)
│ │ └── 5.5 前后端联调/ # integration/(代理、权限、上传、字典)
│ ├── 6. 代码生成器/ # volume5/(CLI、Web UI、模板)
│ ├── 7. 运维部署/ # volume6/(Docker、Nginx、Supervisor、监控)
│ └── 8. 规范标准/ # volume7/(API 响应、分页、Git、测试、文档)
```
## 前端文档结构
前端相关文档分布在以下位置:
| 文档 | 路径 | 说明 |
|------|------|------|
| 前端页面规范 | `volume7/fe-component.md` | 页面结构、组件使用、命名规范 |
| 前端 API 规范 | `volume7/fe-api.md` | API 文件组织、函数命名、请求规范 |
| 公共组件库 | `volume4/frontend/components.md` | 组件列表、Props、Events、用法 |
| 前端构建 | `volume4/frontend/build.md` | Vite 配置、环境变量、Nginx 部署 |
| API 层开发 | `volume4/frontend/api.md` | API 层开发指南 |
| 页面视图开发 | `volume4/frontend/view.md` | 页面视图开发指南 |
## 文档更新检查清单
- [ ] 新增/修改 API 接口时,同步更新 Router 注释
- [ ] 新增/修改 WTForms 字段时,填写 label 和 message
- [ ] 复杂逻辑添加代码注释
- [ ] 重大变更更新 wiki 文档
## 总结
文档规范覆盖 API 文档(Router 注释)、WTForms 文档(字段 label 和 message)、代码注释(文件头/类/方法/行内)。核心原则:文档与代码同步更新,使用中文编写,示例可直接运行。重大变更同步更新 wiki 文档。