Flask学习中的工厂函数和蓝本
程序的工厂函数在app包的构造文件中定义,即__init__.py。这个构造文件导入大多数正在使用的Flask扩展。不过由于尚未初始化所需的程序实例,所以没有初始化扩展,创建扩展类时也没有向构造函数传入参数。create_app()函数就是程序的工厂函数,他接受一个程序使用的配置名作为参数,该配置名在config.py文件中定义。程序创建,配置后,就能初始化扩展了。在之前创建的扩展对象上调用init_app()可以完成初始化过程。转换成程序工厂函数的操作让定义路由变得复杂了。本来我们单脚本文件可以直接使用app.route修饰器的。现在由于程序是在运行时创建的,只有调用create_app()之后才能使用app.route修饰器,然而这时才定义路由就太晚了。为了解决使用工厂函数新带来的问题,Flask提供了蓝本的解决方案。蓝本和程序类似,也可以定义路由,不同的是,在蓝本中定义的路由处于休眠状态,直到蓝本注册到程序上,路由才会成为程序的一部分。这样一来,使用位于全局作用域的蓝本时,定义路由的方法几乎和单脚本程序一样。为了使蓝本有更大的灵活性,建议使用更结构化的方式在包中的多个模块中创建蓝本,为此,在程序包中创建一个子包,专门保存蓝本。蓝本的创建是通过实例化一个Buleprint类对象,创建时必须传入两个参数:蓝本的名字和蓝本所在的包或者模块,这样,模块就能和蓝本产生关联。另外蓝本在工厂函数中注册到程序上。