什么是蓝图(Blueprint)?大型项目怎么拆分模块?
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
蓝图(Blueprint)= 把相关路由打包成一个"子应用",注册到主应用上。 相当于 Flask 的模块化插件机制,让大型项目按业务拆文件、每个文件保持独立。
最小示例:
# auth.py(独立模块)
from flask import Blueprint, request
auth_bp = Blueprint("auth", __name__, url_prefix="/auth")
@auth_bp.route("/login") # 实际路径 /auth/login
def login():
return {"msg": "login page"}
@auth_bp.route("/register")
def register():
return {"msg": "register page"}
# app.py(主应用)
from flask import Flask
from auth import auth_bp
app = Flask(__name__)
app.register_blueprint(auth_bp) # 注册蓝图
典型项目结构:
project/
├── app.py # 主入口:创建 app、注册蓝图
├── config.py # 配置
├── models.py # 数据库模型
├── auth/ # 用户模块
│ └── views.py # auth_bp 定义
├── api/ # 接口模块
│ ├── views.py # api_bp
│ └── services.py
└── templates/ static/ # 模板与静态文件
蓝图常用参数:
Blueprint("auth", __name__,
url_prefix="/auth", # 前缀,所有路由自动加
template_folder="templates",
static_folder="static")
好处: 路由互不干扰(可同名路由不同前缀);模块可复用(一个蓝图注册到多个 app);团队并行开发互不冲突。
注意坑: 蓝图内要用 url_for("auth.login")(蓝图名.函数名)反向生成 URL,别写成 url_for("login");蓝图与主 app 的 404/错误处理器是分开的。
回复
0 条回复