如何从我的配置中注册 Flask 蓝图,就像 Django 中的应用程序一样?
我想在配置文件中定义蓝图,它将自动注册
#config.py
BLUEPRINTS = (
'news',
'files',
)
实际上我一直在一个暂定名为的项目中勾勒出类似的东西臀部口袋 https://github.com/svieira/HipPocket。这基本上与 @HighCat 给你的答案相同,除了它使用 Python 的打包系统而不是config.py
文件(尽管它可以扩展为从配置文件自动加载 -issues https://github.com/svieira/HipPocket/issues and 拉取请求 https://github.com/svieira/HipPocket/pulls非常欢迎。)
所以在 Hip Pocket 中你会这样做(参见hip_pocket.tasks https://github.com/svieira/HipPocket/blob/master/hip_pocket/tasks.py了解其工作原理):
from flask import Flask
from hip_pocket.tasks import autoload
app = Flask(__name__)
autoload(app)
autoload
遍历一个包(默认情况下名为“apps”,尽管您可以通过传入关键字 arg 来更改它apps_package
) 寻找flask.Blueprint
要在应用程序上注册的对象(默认情况下,它会查找名为的符号routes
在名为的模块中routes
在它找到的每个子包中,但这些默认值也可以更改。)您的文件夹布局might看起来像这样:
+ 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)