22

Flask を使用して簡単ではあるが簡単ではないアプリケーションを作成しようとしていますが、ドキュメントでは説明されていない状況に遭遇し続けています。

アプリを異なるモジュールに分割したいのですが、メイン モジュール以外からメインappオブジェクト (またはdbから)にアクセスするのは難しいようです。flask-sqlalchemyすべてがアクセスできるグローバルとして扱う独自の方法を実際に作成する必要があるようです。これには、疑わしいコードと少しの時間が必要です。

appとはどちらもdb、メイン アプリケーションがインスタンス化されるレベルで作成され、すべての例では、それらがトップ レベルで使用可能であることを前提としています。しかし、異なる URL ハンドラーを異なるモジュールに分割すると、@app.routeデコレーターを使用できなくなります。で回避できますがapp.add_url_rule('/...', some.module...)、アプリはその関数に渡されません。

で同じことが起こります- に貼り付ける必要があるのか​​ 、それとも何らかの方法でアクセスできるようにする必要があるのdbか​​ わかりません。ただし、それを行っても、モデルを別のモジュールに移動するのには役立ちません-モデルをインポートするときにどのようにアクセスすればよいですか? すべての例は、ローカル変数として利用できることを前提としています。gappdb

明らかな何かが欠けていますか、それともここで間違ったタスクにフラスコを使用しようとしていますか?

4

2 に答える 2

21

あなたの質問への答えは青写真です。実際、ドキュメンテーションを見ると、アプリケーションをモジュールに分割できるようにするためのブループリントが存在することが記載されています。

サンプルコード:

    from flask import Blueprint

    mod = Blueprint(blueprint_name, __name__, template_folder="folder_name"
                    static_folder="folder_name")

    @mod.route('/mymodule')
    def view():
         # your code

app.py で

    from yourmodule import mod 

    app.register_blueprint(mod)

これは、アプリをモジュールに分割する正しい方法です。詳細については、ブループリントのドキュメントをご覧ください。

さらに、他のモジュールでアプリにアクセスする必要がある場合current_appは、アプリのプロキシを使用する必要があります。

    from flask import current_app

フラスコの作成者による大規模なプロジェクト用にフラスコアプリをモジュールに分割する方法をガイドするこのドキュメントを確認してください。

于 2012-07-13T18:53:26.850 に答える
2

blueprints 機能を見たことがありますか(私はまだ使用していませんが、これはあなたの場合に役立つようです)。

于 2012-07-13T16:27:20.307 に答える