我正在阅读Flask tutorial,并了解到在大型应用程序结构中,代码已从单个app.py
文件移动到create_app
文件中的“应用程序工厂功能” _init_.py
,则服务器可以像这样启动:
export FLASK_APP=flaskr
export FLASK_ENV=development
flask run
我想知道最后一个命令在后台如何工作,因为在代码中的任何地方都没有显式调用此工厂函数,因此没有返回任何应用程序?
另一个Flask doc试图解释为什么使用这种项目结构,但是在这种情况下,_init_.py
中的代码显式创建了app
:
from flask import Flask
app = Flask(__name__)
import yourapplication.views
init .py文件是使Python处理 目录包含软件包;这样做是为了防止 具有常见名称(例如字符串)的目录 隐藏模块搜索中稍后出现的有效模块(更深) 路径。在最简单的情况下, init .py只能是一个空文件,但是 它也可以执行包的初始化代码或设置 所有变量,稍后说明。
最后一句话提到了可以在第二种情况下使用的“初始化代码”(以及带有app.py
文件的简单项目结构),但是我未能将其应用于第一种情况。
答案 0 :(得分:0)
在flask source code中,他们检查是否存在称为create_app
的函数。
# Search for app factory functions.
for attr_name in ('create_app', 'make_app'):
app_factory = getattr(module, attr_name, None)
if inspect.isfunction(app_factory):
try:
app = call_factory(script_info, app_factory)
if isinstance(app, Flask):
return
它在documentation中也是如此:
Flask将自动检测myapp中的工厂(create_app或make_app)。