如何从我的配置中注册 Flask 蓝图,例如 Django 中的应用程序?
我想在配置文件中定义蓝图,会自动注册
#config.py
BLUEPRINTS = (
'news',
'files',
)
如何从我的配置中注册 Flask 蓝图,例如 Django 中的应用程序?
我想在配置文件中定义蓝图,会自动注册
#config.py
BLUEPRINTS = (
'news',
'files',
)
实际上,我一直在一个暂定名为Hip Pocket的项目中勾勒出类似的东西。它与@HighCat 给你的答案基本相同,除了它使用 Python 的打包系统而不是config.py
文件(尽管它可以扩展为从配置文件自动加载 -问题和拉取请求是最受欢迎的。)
所以在 Hip Pocket 你会这样做(看看hip_pocket.tasks
它是如何工作的):
from flask import Flask
from hip_pocket.tasks import autoload
app = Flask(__name__)
autoload(app)
autoload
遍历一个包(默认名为“apps”,尽管您可以通过传入关键字 arg 来更改它apps_package
)寻找要flask.Blueprint
在应用程序上注册的对象(默认情况下,它会查找在它找到的每个子包中命名routes
的模块中命名的符号routes
但这些默认值也可以更改。)您的文件夹布局可能如下所示:
+ you_app
. . . . __init__.py
. . . . app.py
. . . . + apps
. . . . __init__.py
. . . . routes.py # contains the declaration `routes = Blueprint(...)`
. . . . + news
. . . . __init__.py
. . . . routes.py # Ditto
. . . . some_module.py
. . . . + files
. . . . __init__.py
. . . . routes.py # Ditto
. . . . # etc.
或者,如果你想使用基于配置的加载器,你可以这样做:
from flask import Flask
from werkzeug.utils import import_string
app = Flask(__name__)
app.config.from_object("your_app.config")
for tool_path in app.config["BLUEPRINTS"]:
tool = import_string(tool_path)
app.register_blueprint(tool)
Flask 不是 Django,它没有这些特性。如果你真的需要这个,你可以尝试自己实现这个行为:
假设您有中央 Flask 应用程序文件,其中包含:
import flask
app = flask.Flask(__name__)