DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

什么是蓝图(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/错误处理器是分开的。

下载推广海报

圈内讨论推广海报

《什么是蓝图(Blueprint)?大型项目怎么拆分模块?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。