2018-05-21

为什么要使用蓝图

使应用模块化。

提高代码的内聚性,降低代码的耦合性。

如何在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([ order111.order1>,

users.login1>,

users.info>,

' (HEAD, OPTIONS, GET) -> static>])

由视图路由的映射关系可以看出,在创建蓝图对象时的参数url_prefix会加到访问路由url的前缀,而蓝图名会写在对应的视图函数名前,以唯一确定执行的视图函数。

你可能感兴趣的:(2018-05-21)