Files
djangoadmin-wiki/DjangoAdmin_Flask_NaiveVue/zh/volume2/router.md
T
2026-09-12 23:12:15 +08:00

139 lines
3.7 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.
# 路由注册
路由注册是将模块的 Blueprint 挂载到应用的过程。所有模块的路由在 `src/routes/v1.py` 中统一注册。
## 文件位置
```
src/routes/v1.py
```
## 注册步骤
### 第一步:导入 Blueprint
在 `v1.py` 文件顶部的导入区域添加:
```python
from src.modules.system.position.router import position_blue
```
### 第二步:挂载 Blueprint
在 `BLUEPRINTS` 列表中添加:
```python
BLUEPRINTS = [
# ... 其他 Blueprint
position_blue,
]
```
### 完整上下文
```python
# v1.py 中的路由注册(简化示例)
from flask import Blueprint
from src.modules.system.position.router import position_blue
from src.modules.system.level.router import level_blue
from src.modules.system.dept.router import dept_blue
# ... 其他模块导入
# 全部业务蓝图(按领域分组排序)
BLUEPRINTS = [
position_blue,
level_blue,
dept_blue,
# ... 其他模块注册
]
def register_v1(app):
"""
注册 API v1 路由(所有业务蓝图挂载到 /api/v1)。
Args:
app: Flask 应用实例
"""
v1 = Blueprint('v1', __name__, url_prefix='/api/v1')
for blue in BLUEPRINTS:
v1.register_blueprint(blue)
app.register_blueprint(v1)
return app
```
## 最终 API 路径
注册后,Position 模块的接口路径为:
| 方法 | 路径 | 说明 |
|:----|:----|:----|
| GET | `/api/v1/position/page` | 分页查询 |
| GET | `/api/v1/position/detail/<id>` | 详情查询 |
| GET | `/api/v1/position/list` | 列表查询 |
| POST | `/api/v1/position/add` | 新增 |
| PUT | `/api/v1/position/update` | 更新 |
| DELETE | `/api/v1/position/delete/<id>` | 单条删除 |
| DELETE | `/api/v1/position/batchDelete` | 批量删除 |
| PUT | `/api/v1/position/status` | 状态变更 |
## prefix 命名规范
| 规则 | 示例 |
|:----|:----|
| 使用小写英文 | `/position` 而非 `/Position` |
| 使用单数形式 | `/position` 而非 `/positions` |
| 多单词用驼峰或短横线 | `/jobLog` 或 `/job-log` |
| 与模块目录名一致 | `modules/system/position/` → `/position` |
## Blueprint 定义示例
在模块的 `router.py` 文件中定义 Blueprint:
```python
# src/modules/system/position/router.py
from flask import Blueprint, request
from src.middleware import check_demo, operation_log
from src.core.permission import check_permission
from src.modules.system.position import service as position
from src.common.utils.request import parse_request_body
from src.core import response as R
position_blue = Blueprint('position', __name__, url_prefix='/position')
@position_blue.route('/page', methods=["GET"])
@check_permission("sys:position:page")
@operation_log("岗位管理", "查询")
def page():
"""查询岗位分页数据"""
return R.ok(data=position.get_position_page(request.args))
@position_blue.route('/add', methods=["POST"])
@check_permission("sys:position:add")
@check_demo
@operation_log("岗位管理", "新增")
def add():
"""添加岗位"""
json_data, err = parse_request_body()
if err:
return R.failed(msg=err)
position.add_position(json_data)
return R.ok(msg="添加成功")
```
## 开发要点
1. **只需两步**:一行导入,一行添加到 `BLUEPRINTS` 列表
2. **prefix 与模块目录名保持一致**:便于代码导航
3. **所有业务蓝图都挂在 `v1` 路由组下**:自动享受 `login_required` 认证保护
4. **使用 `check_permission` 装饰器**:实现 RBAC 权限控制
## 总结
路由注册在 `src/routes/v1.py` 中统一管理,`BLUEPRINTS` 列表包含所有业务模块的 Blueprint。所有业务蓝图挂在 `v1` 路由组下,自动享受 `login_required` 认证保护。使用 `check_permission` 装饰器实现 RBAC 权限控制。