Django のアプリのような設定から Flask ブループリントを登録するにはどうすればよいですか?
設定ファイルでブループリントを定義したいのですが、自動的に登録されます
#config.py
BLUEPRINTS = (
'news',
'files',
)
Django のアプリのような設定から Flask ブループリントを登録するにはどうすればよいですか?
設定ファイルでブループリントを定義したいのですが、自動的に登録されます
#config.py
BLUEPRINTS = (
'news',
'files',
)
実際に、 Hip Pocketという仮名のプロジェクトで、そのようなものをスケッチしていました。ファイルではなくPythonのパッケージングシステムを使用することを除いて、基本的に@HighCatが提供したのと同じ答え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__)