大規模なアプリケーション—フラスコのドキュメント

提供:Dev Guides
< FlaskFlask/docs/1.0.x/patterns/packages
移動先:案内検索

大規模なアプリケーション

次のような単純なフラスコアプリケーション構造を想像してみてください。

/yourapplication
    yourapplication.py
    /static
        style.css
    /templates
        layout.html
        index.html
        login.html
        ...

これは小さなアプリケーションには問題ありませんが、大きなアプリケーションにはモジュールの代わりにパッケージを使用することをお勧めします。 NS チュートリアルパッケージパターンを使用するように構成されています。を参照してください。 :gh: `サンプルコード `

シンプルなパッケージ

これをより大きなフォルダに変換するには、既存のフォルダ内に新しいフォルダyourapplicationを作成し、その下にすべてを移動します。 次に、yourapplication.pyの名前を__init__.pyに変更します。 (最初にすべての.pycファイルを削除してください。そうしないと、問題が発生する可能性が高くなります)

その後、次のような結果になるはずです。

/yourapplication
    /yourapplication
        __init__.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html
            ...

しかし、今どのようにアプリケーションを実行していますか? ナイーブなpython yourapplication/__init__.pyは機能しません。 Pythonがパッケージ内のモジュールをスタートアップファイルにしたくないとだけ言っておきましょう。 しかし、それは大きな問題ではありません。次の内容のsetup.pyという名前の新しいファイルを内側のyourapplicationフォルダーの横に追加するだけです。

from setuptools import setup

setup(
    name='yourapplication',
    packages=['yourapplication'],
    include_package_data=True,
    install_requires=[
        'flask',
    ],
)

アプリケーションを実行するには、アプリケーションインスタンスの場所をFlaskに指示する環境変数をエクスポートする必要があります。

export FLASK_APP=yourapplication

プロジェクトディレクトリの外にいる場合は、アプリケーションディレクトリへの正確なパスを指定してください。 同様に、次のような開発機能をオンにすることができます。

export FLASK_ENV=development

アプリケーションをインストールして実行するには、次のコマンドを発行する必要があります。

pip install -e .
flask run

これから何を得ましたか? これで、アプリケーションを少し再構築して複数のモジュールにすることができます。 覚えておく必要があるのは、次の簡単なチェックリストだけです。

  1. Flask アプリケーションオブジェクトの作成は、__init__.pyファイルに含まれている必要があります。 そうすれば、各モジュールはそれを安全にインポートでき、 __ name __ 変数は正しいパッケージに解決されます。
  2. すべてのビュー関数(route()デコレータが上にある関数)は、__init__.pyファイルにインポートする必要があります。 オブジェクト自体ではなく、オブジェクトが含まれているモジュールです。 アプリケーションオブジェクトの作成後にビューモジュールをインポートします

次に例を示します__init__.py

from flask import Flask
app = Flask(__name__)

import yourapplication.views

そして、これはviews.pyがどのように見えるかです:

from yourapplication import app

@app.route('/')
def index():
    return 'Hello World!'

その後、次のような結果になるはずです。

/yourapplication
    setup.py
    /yourapplication
        __init__.py
        views.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html
            ...

循環輸入

すべてのPythonプログラマーはそれらを嫌っていますが、それでもいくつか追加しました:循環インポート(2つのモジュールが相互に依存している場合です。 この場合、views.py__init__.pyに依存します。 これは一般的に悪い考えですが、ここでは実際には問題ないことに注意してください。 これは、__init__.pyのビューを実際に使用しておらず、モジュールがインポートされていることを確認するだけで、ファイルの最後でそれを行っているためです。

そのアプローチにはまだいくつかの問題がありますが、デコレータを使用したい場合はそれを回避する方法はありません。 これに対処するためのインスピレーションについては、 Becoming Big セクションを確認してください。


ブループリントの操作

大規模なアプリケーションがある場合は、それらを小さなグループに分割し、各グループがブループリントを使用して実装されるようにすることをお勧めします。 このトピックの簡単な紹介については、ドキュメントのブループリント付きモジュラーアプリケーションの章を参照してください。