Profile

User profile and story timeline

user-img
nyg

转换成程序工厂函数的操作让定义路由变复杂了。 Flask使用蓝本提供了更好的解决方法。
蓝本和程序类似,也可以定义路由。不同的是,在蓝本中定义的路由处于休眠状态,直到蓝本注册到程序上后,路由才真正成为程序的一部分。程序包中创建了一个子包,用于保存蓝本。子包的构造文件中创建蓝本,通过实例化一个Blueprint类对象可以创建蓝本。这个构造函数有两个必须指定的参数:蓝本的名字和蓝本所在的包或模块。main = Blueprint( 'main',__name__ ),程序的路由保存在包里的app/main/views.py模块中,而错误处理程序保存在app/main/errors.py模块中。导入这两个模块就能把路由和错误处理程序与蓝本关联起来。
蓝本在主程序包下的工厂函数create_app()中注册到程序上
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
在蓝本中就不一样了,Flask会为蓝本中的全部端点加上一个命名空间,这样就可以在不同的蓝本中使用相同的端点名定义视图函数,而不会产生冲突。命名空间就是蓝本的名字(Blueprint构造函数的第一个参数),所以视图函数index()注册的端点名是main.index,其URL使用url_for('main.index')获取。

回复