refactor: P6 API v1 版本化

- src/routes/v1.py:注册中心,148 条路由全部挂 /api/v1
- application/views/__init__.py:自动发现改为 register_v1 显式注册
- 登录白名单更新为 /api/v1/login 等(.env 与 .env.example)
- build_full_url:内部调度调用自动加 /api/v1 前缀

【联动】ui/ 前端需将 API 调用前缀改为 /api/v1(随 ui/ 迁移处理)
【验收】148 路由全 /api/v1;白名单放行(/api/v1/login 表单校验);
鉴权拦截 401;build_full_url 验证;12 passed

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
DjangoAdmin Dev
2026-08-07 19:42:05 +08:00
co-authored by Claude
parent 4b0b28105c
commit 4d74b31431
6 changed files with 74 additions and 29 deletions
+3
View File
@@ -132,6 +132,9 @@ def build_full_url(url: str) -> str:
# 相对路径,拼接站点域名
if url.startswith("/"):
# 内部 API 调用统一挂到 /api/v1(P6 API 版本化)
if not url.startswith("/api/"):
url = f"/api/v1{url}"
url = f"{FLASK_SITE_DOMAIN}{url}"
return url
+1
View File
@@ -0,0 +1 @@
"""路由注册中心包。"""
+61
View File
@@ -0,0 +1,61 @@
"""
API v1 路由注册中心
=============================================================
所有业务蓝图统一挂载到 /api/v1 前缀下:
- 模块内蓝图保持各自的 url_prefix(如 /user、/role)
- 整体前缀由 v1 父蓝图提供 → /api/v1/user/page 等
联动说明:
- 登录白名单需改为 /api/v1/login 等(见 config/auth.py 与 .env)
- 内部 HTTP 调用(定时任务)需追加 /api/v1
"""
from flask import Blueprint
from src.modules.auth.router import login_blue, index_blue
from src.modules.association.role_menu.router import role_menu_blue
from src.modules.association.user_role.router import user_role_blue
from src.modules.city.router import city_blue
from src.modules.cms.article.router import article_blue
from src.modules.cms.category.router import category_blue
from src.modules.cms.link.router import link_blue
from src.modules.configuration.router import config_blue, config_item_blue
from src.modules.dictionary.router import dict_blue, dict_item_blue
from src.modules.file_template.router import file_template_blue
from src.modules.job.router import job_blue
from src.modules.log.router import login_log_blue, operation_log_blue
from src.modules.notice.router import notice_blue
from src.modules.param.router import param_blue
from src.modules.system.dept.router import dept_blue
from src.modules.system.level.router import level_blue
from src.modules.system.menu.router import menu_blue
from src.modules.system.position.router import position_blue
from src.modules.system.role.router import role_blue
from src.modules.system.user.router import user_blue
from src.modules.upload.router import upload_blue
# 全部业务蓝图(按领域分组排序)
BLUEPRINTS = [
login_blue, index_blue,
user_blue, role_blue, menu_blue, dept_blue, position_blue, level_blue,
user_role_blue, role_menu_blue,
dict_blue, dict_item_blue, config_blue, config_item_blue,
param_blue, notice_blue, category_blue, article_blue, link_blue,
upload_blue, file_template_blue, login_log_blue, operation_log_blue,
city_blue, job_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