flask 使用程序工厂函数 和 蓝本中实现程序功能

使用程序工厂函数app

在单个文件中开发程序很方便,但却有个很大的缺点,由于程序在全局做用域中建立,所
以没法动态修改配置。函数

运行脚本时,程序实例已经建立,再修改配置为时已晚。这一点对
单元测试尤为重要,由于有时为了提升测试覆盖度,必须在不一样的配置环境中运行程序。单元测试


这个问题的解决方法是延迟建立程序实例,把建立过程移到可显式调用的工厂函数中。这
种方法不只能够给脚本留出配置程序的时间,还可以建立多个程序实例,这些实例有时在
测试中很是有用。程序的工厂函数在 app 包的构造文件中定义,如示例 7-3 所示。
构造文件导入了大多数正在使用的 Flask 扩展。因为还没有初始化所需的程序实例,因此没
有初始化扩展,建立扩展类时没有向构造函数传入参数。 create_app() 函数就是程序的工
厂函数,接受一个参数,是程序使用的配置名。配置类在 config.py 文件中定义,其中保存
的配置可使用 Flask  app.config 配置对象提供的 from_object() 方法直接导入程序。至
于配置对象,则能够经过名字从 config 字典中选择。程序建立并配置好后,就能初始化
扩展了。在以前建立的扩展对象上调用 init_app() 能够完成初始化过程。测试

 

在蓝本中实现程序功能spa


转换成程序工厂函数的操做让定义路由变复杂了。在单脚本程序中,程序实例存在于全
局做用域中,路由能够直接使用 app.route 修饰器定义。对象

但如今程序在运行时建立,只有调用 create_app() 以后才能使用 app.route 修饰器,这时定义路由就太晚了。和路由
同样,自定义的错误页面处理程序也面临相同的困难,由于错误页面处理程序使用 app.
errorhandler 修饰器定义。
幸亏 Flask 使用蓝本提供了更好的解决方法。蓝本和程序相似,也能够定义路由。不一样的
是,在蓝本中定义的路由处于休眠状态,直到蓝本注册到程序上后,路由才真正成为程序
的一部分。使用位于全局做用域中的蓝本时,定义路由的方法几乎和单脚本程序同样。
和程序同样,蓝本能够在单个文件中定义,也可以使用更结构化的方式在包中的多个模块中
建立。为了得到最大的灵活性,程序包中建立了一个子包,用于保存蓝本。示例 7-4 是这
个子包的构造文件,蓝本就建立于此。作用域

相关文章
相关标签/搜索