如何在Django中从类似配置的应用程序注册Flask蓝图



如何在Django中从类似配置的应用程序中注册Flask Blueprint?

我想在配置文件中定义蓝图,它将自动注册

#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,它没有这样的特性。如果你真的需要,你可以尝试自己实现这种行为:

假设您有中央烧瓶应用程序文件,其中包含:

import flask
app = flask.Flask(__name__)
  1. 将您的BLUEPRINTS变量放入flask的配置(您在app.config.from_file[…]中注册的那个),这样它就可以通过app.config['BLUEPRINTS']访问
  2. 在您的中央应用程序文件中(您在其中执行app=flaks.flask(__name__)),只需迭代app.config['BLUEPRINTS'],尝试从它们所在的位置导入它们,并用app.register_blueprint()注册它们

相关内容

  • 没有找到相关文章

最新更新