大規模なアプリケーション
次のような単純なフラスコアプリケーション構造を想像してみてください。
これは小さなアプリケーションには問題ありませんが、大きなアプリケーションにはモジュールの代わりにパッケージを使用することをお勧めします。 NS チュートリアルパッケージパターンを使用するように構成されています。を参照してください。 :gh: `サンプルコード ` 。
シンプルなパッケージ
これをより大きなフォルダに変換するには、既存のフォルダ内に新しいフォルダyourapplication
を作成し、その下にすべてを移動します。 次に、yourapplication.py
の名前を__init__.py
に変更します。 (最初にすべての.pyc
ファイルを削除してください。そうしないと、問題が発生する可能性が高くなります)
その後、次のような結果になるはずです。
しかし、今どのようにアプリケーションを実行していますか? ナイーブなpython yourapplication/__init__.py
は機能しません。 Pythonがパッケージ内のモジュールをスタートアップファイルにしたくないとだけ言っておきましょう。 しかし、それは大きな問題ではありません。次の内容のsetup.py
という名前の新しいファイルを内側のyourapplication
フォルダーの横に追加するだけです。
アプリケーションを実行するには、アプリケーションインスタンスの場所をFlaskに指示する環境変数をエクスポートする必要があります。
プロジェクトディレクトリの外にいる場合は、アプリケーションディレクトリへの正確なパスを指定してください。 同様に、次のような開発機能をオンにすることができます。
アプリケーションをインストールして実行するには、次のコマンドを発行する必要があります。
これから何を得ましたか? これで、アプリケーションを少し再構築して複数のモジュールにすることができます。 覚えておく必要があるのは、次の簡単なチェックリストだけです。
- Flask アプリケーションオブジェクトの作成は、
__init__.py
ファイルに含まれている必要があります。 そうすれば、各モジュールはそれを安全にインポートでき、 __ name __ 変数は正しいパッケージに解決されます。 - すべてのビュー関数(
route()
デコレータが上にある関数)は、__init__.py
ファイルにインポートする必要があります。 オブジェクト自体ではなく、オブジェクトが含まれているモジュールです。 アプリケーションオブジェクトの作成後にビューモジュールをインポートします。
次に例を示します__init__.py
:
そして、これはviews.py
がどのように見えるかです:
その後、次のような結果になるはずです。
循環輸入
すべてのPythonプログラマーはそれらを嫌っていますが、それでもいくつか追加しました:循環インポート(2つのモジュールが相互に依存している場合です。 この場合、views.py
は__init__.py
に依存します。 これは一般的に悪い考えですが、ここでは実際には問題ないことに注意してください。 これは、__init__.py
のビューを実際に使用しておらず、モジュールがインポートされていることを確認するだけで、ファイルの最後でそれを行っているためです。
そのアプローチにはまだいくつかの問題がありますが、デコレータを使用したい場合はそれを回避する方法はありません。 これに対処するためのインスピレーションについては、 Becoming Big セクションを確認してください。
ブループリントの操作
大規模なアプリケーションがある場合は、それらを小さなグループに分割し、各グループがブループリントを使用して実装されるようにすることをお勧めします。 このトピックの簡単な紹介については、ドキュメントのブループリント付きモジュラーアプリケーションの章を参照してください。