为什么要使用蓝图
- 使应用模块化。
- 提高代码的内聚性,降低代码的耦合性。
如何在flask中创建蓝图
- 在工作目录中右击创建Python packages包,创建出对应功能模块的包,其中会自动生成init模块,在init中创建BluePrint蓝图。
- 在init模块中导入对应的模块
- 创建蓝图对象
- 将路由注册到蓝图,建立蓝图和视图的联系
- 将蓝图注册到app
以创建用户信息users和订单orders为例
users/init.py模块中
# coding=utf-8
# 导入Blueprint模块
from flask import Blueprint
# 创建蓝图对象 参数 1.蓝图名称 2.访问路由前缀
user_blue = Blueprint("users", __name__, url_prefix="/users")
# 导入视图函数
from . import view
orders/init.py模块中
# coding=utf-8
from flask import Blueprint
order_blue = Blueprint("order111", __name__, url_prefix="/orders")
from . import view
users/view.py模块中
# coding=utf-8
# 从users包中导入蓝图对象
from users import user_blue
# 将路由注册到蓝图,建立路由与视图函数的关系
@user_blue.route("/info")
def info():
return "info page"
@user_blue.route("/login")
def login1():
return "login page"
manage.py模块中
# coding=utf-8
from flask import Flask
# 导入蓝图对象
from users import user_blue
from orders import order_blue
app = Flask(__name__)
# 将蓝图注册到app
app.register_blueprint(user_blue)
app.register_blueprint(order_blue)
if __name__ == '__main__':
print(app.url_map)
app.run()
最终输出的url_map映射结果为:
Map([<Rule '/orders/order' (HEAD, OPTIONS, GET) -> order111.order1>,
<Rule '/users/login' (HEAD, OPTIONS, GET) -> users.login1>,
<Rule '/users/info' (HEAD, OPTIONS, GET) -> users.info>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
由视图路由的映射关系可以看出,在创建蓝图对象时的参数url_prefix会加到访问路由url的前缀,而蓝图名会写在对应的视图函数名前,以唯一确定执行的视图函数。