一、简介
-
Flask中的蓝图(Blueprint)是一种组织和管理应用程序路由和视图的机制。它允许开发者将相关功能的路由和视图进行分组,从而更好地组织项目结构和实现模块化开发。蓝图可以极大地简化大型应用,并为扩展提供几种的注册入口。
-
Flask可以通过蓝图来组织URL以及处理请求。如果使用蓝图,应用会在Flask层中进行管理,共享配置,通过注册按需改变应用对象。
-
蓝图的缺点是,一旦应用被创建后,只有销毁整个应用对象,才能注销。
-
一个项目可以具有多个蓝图,但一个蓝图并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
二、应用场景
- 项目复杂度增加,路由和视图函数增多;
- 路由需要结构化、模块化进行管理。
三、蓝图使用
3.1 创建蓝图对象
- 要使用蓝图,首先要声明一个蓝图对象。
from flask import Blueprint
# 声明蓝图
goods_router = Blueprint(name="goods", import_name=__name__)
- 参数说明(这两个是必填参数):
- name:蓝图的名称;
- import_name:蓝图所在的模块,一般定义为
__name__
。
3.2 定义路由
- 声明蓝图后,就可以获得蓝图对象
goods_router
。 - 接下来需要使用蓝图对象去定义路由。
# 定义路由
@goods_router.route("/")
def index():
return {"code": 0, "msg": "Get success.", "data": [1, 2, "a", "b"]}
@goods_router.route("/add/", methods=["POST"])
def add_goods():
return {"code": 1, "msg": "Add success."}
3.3 注册蓝图对象
- 完成以上两步后,就需要验证一下路由。在启动Flask服务之前,将蓝图注册到Flask启动的对象中:
from flask import Flask
app = Flask(__name__)
if __name__ == '__main__':
# 注册蓝图
app.register_blueprint(goods_router)
app.run(port=5055, debug=True)
3.4 定义URL前缀
- 可以指定一个
url_prefix
关键字参数,该参数是字符串类型,并且必须以/
开头,默认是/
。 - 其作用是在蓝图上注册的路由URL自动会加上这个前缀。这样可以保证在多个蓝图中使用相同的URL规则不会引起冲突。这样就可以在不同的前缀下定义行为,如:增删改查。
- 当设置了
url_prefix
参数后,定义路由时,如路由直接使用url_prefix
的值,则route()
方法中传入空字符串即可。 - 如需要在
url_prefix
的基础上再加下一级路由,则在route()
方法中传入对应的路由即可,需要使用/
开头。 - 因此,在访问路由时,必须加入
url_prefix
参数定义的前缀,才可以访问成功。
from flask import Flask
from flask import Blueprint
app = Flask(__name__)
# 声明蓝图
user_router = Blueprint("user", __name__, url_prefix="/user")
# 定义路由
@user_router.route("")
def user_list():
return {"code": 0, "msg": "Get success.", "data": ["a", "b"]}
@user_router.route("/login/", methods=["POST"])
def login():
return {"code": 1, "msg": "Login success."}
if __name__ == '__main__':
# 注册蓝图
app.register_blueprint(user_router)
app.run(port=5055, debug=True)