工厂函数是被命名为create_app或者make_app的函数,内部完成加载配置,创建app、加载配置等功能,最后输出app,代码如下:
def create_app(config_name=None):
'''
这是一个工厂函数,会根据传入参数来创建响应app,
'''
if config_name is None:
config_name = os.getenv('FLASK_CONFIG', 'development')
# 创建app、加载配置
app = Flask('bluelog')
app.config.from_object(config[config_name])
register_logging(app) # 注册日志处理器
register_extensions(app) # 注册扩展(扩展初始化)
register_blueprints(app) # 注册蓝本
register_commands(app) # 注册自定义shell命令
register_errors(app) # 注册错误处理函数
register_shell_context(app) # 注册shell上下文处理函数
register_template_context(app) # 注册模板上下文处理函数
return app
- 其中,扩展的实例化和初始化是单独实现的,实例化在单独的脚本中——extensions.py,之后在工厂函数中实例化
- Flask会自动从环境变量FLASK_APP的值定义的模块中寻找名为create_app或make_app的工厂函数,自动调用工厂函数创建程序实例并运行