蓝图Blueprint与视图

一、简介

  • Flask中的蓝图(Blueprint)是一种组织和管理应用程序路由和视图的机制。它允许开发者将相关功能的路由和视图进行分组,从而更好地组织项目结构和实现模块化开发。蓝图可以极大地简化大型应用,并为扩展提供几种的注册入口。

  • Flask可以通过蓝图来组织URL以及处理请求。如果使用蓝图,应用会在Flask层中进行管理,共享配置,通过注册按需改变应用对象。

  • 蓝图的缺点是,一旦应用被创建后,只有销毁整个应用对象,才能注销。

  • 一个项目可以具有多个蓝图,但一个蓝图并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。

二、应用场景

  1. 项目复杂度增加,路由和视图函数增多;
  2. 路由需要结构化、模块化进行管理。
    image

三、蓝图使用

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)