蓝图与视图
简介
Flask 中的蓝图(Blueprint)是一种组织和管理应用程序路由和视图的机制。它允许开发者将相关功能的路由和视图进行分组,从而更好地组织项目结构和实现模块化开发。蓝图可以极大地简化大型应用并为扩展提供集中的注册入口。
Flask 可以通过蓝图来组织 URL 以及处理请求。如果使用蓝图,应用会在 Flask 层中进行管理,共享配置,通过注册按需改变应用对象。蓝图的缺点是一旦应用被创建后,只有销毁整个应用对象才能注销蓝图。
一个项目可以具有多个蓝图。但是一个蓝图并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
应用场景
- 项目复杂度增加,路由和视图函数增多。
- 路由需要结构化,模块化进行管理。

蓝图使用
创建蓝图对象
要使用蓝图,首先要声明一个蓝图对象。
from flask import Blueprint
# 1. 蓝图的声明
goods_router = Blueprint(name="goods", import_name=__name__)
- 参数说明:
name:蓝图的名称import_name:蓝图所在的模块 ,一般定义为__name__
这两个是必填参数。
定义路由
声明了蓝图之后,就可以获得蓝图对象 goods_router。接下来需要使用蓝图对象去定义路由。
# 2. 路由定义
@goods_router.route("/")
def index():
return {"code":0, "msg": "get success", "data": []}
@goods_router.route("/add", methods=["POST"])
def add_goods():
return {"code":0, "msg": "add success"}
路由定义需要使用 / 开头。如果需要指定非 GET 的请求方法,同样通过 methods 参数指定,methods 的值为列表。
注册蓝图对象
当完成上面两步以后,就可以去验证一下路由。需要在启动 flask 服务之前,将蓝图注册到 flask 启动对象中:
from flask import Flask
app = Flask(__name__)
if __name__ == '__main__':
# 注册蓝图
app.register_blueprint(goods_router)
app.run(port=5055, debug=True)
应用启动后,通过 / 和 /add 就可以访问到到蓝图中定义的视图函数。
定义 URL 前缀
当在应用对象上注册一个蓝图时,还可以指定一个 url_prefix 关键字参数,该参数是字符串类型,并且必须以 / 开头,默认是 /。
它的作用是在蓝图上注册的路由 URL 自动会加上这个前缀。这样可以保证在多个蓝图中使用相同的 URL 规则而不会最终引起冲突。这样就可以在不同的前缀下定义行为,比如增删改查。
from flask import Blueprint
user_router = Blueprint("user", __name__, url_prefix="/user")
@user_router.route("")
def user_list():
return {"code": 0, "msg": "get success", "data": []}
@user_router.route("/login", methods=["POST"])
def login():
return {"code": 0, "msg": "login success"}
if __name__ == '__main__':
# 注册蓝图
app.register_blueprint(user_router)
app.run(port=5055, debug=True)
当设置了 url_prefix 参数后,定义路由时,如果路由直接使用 url_prefix 的值,则 route() 方法中传入空字符串即可。
如果需要在 url_prefix 值的基础上再加下一级路由,则在 route() 方法中传入对应路由即可,需要使用 / 开头
此时,如果访问的是http://127.0.0.1:5055/login,会报错 404
这就是参数 url_prefix 起了作用,需要在访问路由的时候,加上前缀 /user,也就是 /user/login 才可以访问成功。
浙公网安备 33010602011771号