Flask_蓝图Blueprint(十四)

什么是蓝图?

蓝图:用于实现单个应用的视图、模板、静态文件的集合。

蓝图就是模块化处理的类。

简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。

为什么学习蓝图?

我们学习Flask框架,是从写单个文件,执行hello world开始的。我们在这单个文件中可以定义路由、视图函数、定义模型等等。但这显然存在一个问题:随着业务代码的增加,将所有代码都放在单个程序文件中,是非常不合适的。这不仅会让代码阅读变得困难,而且会给后期维护带来麻烦。

一个程序执行文件中,功能代码过多,就得让代码模块化。依据不同的功能,划分成不同的分类,降低各功能模块之间的耦合度。

蓝图的运行机制

蓝图是保存了一组将来可以在应用对象上执行的操作。注册路由就是一种操作,当在程序实例上调用route装饰器注册路由时,这个操作将修改对象的url_map路由映射列表。当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项。当执行应用对象的 register_blueprint() 方法时,应用对象从蓝图对象的 defered_functions 列表中取出每一项,即调用应用对象的 add_url_rule() 方法,这将会修改程序实例的路由映射列表。

蓝图的使用

1、创建蓝图实例对象

from flask import Blueprint

# 1、在模块目录下的__init__.py文件中,创建蓝图
# blue_print 为定义的蓝图实例
# 第一个参数为蓝图的名称
# 第二个参数为蓝图所在的模块
# blue_print = Blueprint("blue", __name__)

# 可以使用app定义模板的方式来定义蓝图的模板目录/静态文件目录
# 当使用了蓝图模板后,如果在app定义的模板目录找不到模板后,会再在蓝图模板目录进行查找
blue_print = Blueprint("blue", __name__, template_folder="templates")

2、注册蓝图路由。

# 2、在模块目录下的views.py中使用蓝图实例定义视图的路由
from . import blue_print
from flask import render_template

@blue_print.route("/index")
def index():
    return render_template("blueprint_index.html")

3、在程序实例中注册该蓝图

# 3、在主程序模块使用如下代码完成蓝图注册
# url_prefix定义蓝图路由的前缀,可缺省。
app.register_blueprint(blue_print, url_prefix="/blue")

4、将路由添加到MAP对象中

# 4、在模块目录下的__init__.py文件中,将路由添加到Map中
from .views import index

目录结构如下

访问蓝图定义的路由

 

posted @ 2020-12-15 14:49  码上测  阅读(128)  评论(0编辑  收藏  举报