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
+5 -25
View File
@@ -102,36 +102,16 @@ _blueprint_modules = [
def register_blueprint(app):
"""
自动导入所有视图模块并注册蓝图到Flask应用实例
注册 API v1 路由到 Flask 应用实例
功能说明:
遍历 _blueprint_modules 列表,动态导入每个视图模块,
自动发现模块中的 Blueprint 实例并注册到应用。
此函数在应用启动时调用(通常位于 create_app 工厂函数中)。
所有业务蓝图统一挂载到 /api/v1 前缀(见 src/routes/v1.py)。
原自动发现机制已由 routes/v1.py 的显式注册取代。
Args:
app: Flask应用实例
Returns:
Flask: 注册完成后的Flask应用实例
Example:
# 在应用工厂函数中调用
def create_app():
app = Flask(__name__)
# ... 其他配置 ...
register_blueprint(app)
return app
"""
registered = set()
for module_name in _blueprint_modules:
mod = importlib.import_module(f'application.views.{module_name}')
for attr_name in dir(mod):
attr = getattr(mod, attr_name)
if isinstance(attr, Blueprint):
# 合并模块的 shim 会重复导出同一批 Blueprint,按名去重
if attr.name in registered:
continue
app.register_blueprint(attr)
registered.add(attr.name)
return app
from src.routes.v1 import register_v1
return register_v1(app)