4

Django のアプリのような設定から Flask ブループリントを登録するにはどうすればよいですか?

設定ファイルでブループリントを定義したいのですが、自動的に登録されます

#config.py
BLUEPRINTS = (
'news',
'files',
)
4

2 に答える 2

2

実際に、 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)
于 2012-07-26T02:54:12.027 に答える
1

FlaskはDjangoではなく、そのような機能はありません。本当にこれが必要な場合は、この動作を自分で実装してみてください。

次のような中央のFlaskアプリケーションファイルがあるとします。

import flask
app = flask.Flask(__name__)
  1. BLUEPRINTS変数をフラスコの構成(app.config.from_pyfile(...)に登録したもの)に入れて、app.config['BLUEPRINTS']からアクセスできるようにします。
  2. 中央のアプリケーションファイル(app = flask.Flask(__ name__)を実行する場所)で、app.config ['BLUEPRINTS']を繰り返し処理し、可能な場所からインポートして、app.register_blueprintに登録します。 ()。
于 2012-07-25T09:08:08.377 に答える