アプリケーションのディスパッチ
アプリケーションディスパッチは、WSGIレベルで複数のFlaskアプリケーションを組み合わせるプロセスです。 Flaskアプリケーションだけでなく、任意のWSGIアプリケーションを組み合わせることができます。 これにより、必要に応じて、同じインタープリターでDjangoアプリケーションとFlaskアプリケーションを並べて実行できます。 これの有用性は、アプリケーションが内部でどのように機能するかによって異なります。
モジュールアプローチとの根本的な違いは、この場合、互いに完全に分離された同じまたは異なるFlaskアプリケーションを実行していることです。 それらは異なる構成を実行し、WSGIレベルでディスパッチされます。
このドキュメントの操作
以下の各手法と例により、任意のWSGIサーバーで実行できるapplication
オブジェクトが作成されます。 実稼働については、展開オプションを参照してください。 開発のために、Werkzeugはwerkzeug.serving.run_simple()
で利用可能な開発用の組み込みサーバーを提供します。
run_simple
は本番環境での使用を目的としていないことに注意してください。 本格的なWSGIサーバーを使用してください。
対話型デバッガーを使用するには、アプリケーションと単純サーバーの両方でデバッグを有効にする必要があります。 デバッグとrun_simple
を使用した「helloworld」の例を次に示します。
アプリケーションの組み合わせ
完全に分離されたアプリケーションがあり、それらを同じPythonインタープリタープロセスで互いに隣接して動作させたい場合は、werkzeug.wsgi.DispatcherMiddleware
を利用できます。 ここでの考え方は、各Flaskアプリケーションが有効なWSGIアプリケーションであり、ディスパッチャーミドルウェアによって結合されて、プレフィックスに基づいてディスパッチされるより大きなアプリケーションになるということです。
たとえば、メインアプリケーションを/
で実行し、バックエンドインターフェイスを/backend
で実行することができます。
サブドメインによる発送
同じアプリケーションの複数のインスタンスを異なる構成で使用したい場合があります。 アプリケーションが関数内で作成され、その関数を呼び出してインスタンス化できると仮定すると、実装は非常に簡単です。 関数での新しいインスタンスの作成をサポートするアプリケーションを開発するには、アプリケーションファクトリパターンを確認してください。
非常に一般的な例は、サブドメインごとにアプリケーションを作成することです。 たとえば、すべてのサブドメインに対するすべてのリクエストをアプリケーションにディスパッチするようにWebサーバーを構成してから、サブドメイン情報を使用してユーザー固有のインスタンスを作成します。 すべてのサブドメインをリッスンするようにサーバーを設定したら、非常に単純なWSGIアプリケーションを使用して動的なアプリケーションを作成できます。
その点での抽象化に最適なレベルは、WSGIレイヤーです。 来るリクエストを見て、それをFlaskアプリケーションに委任する独自のWSGIアプリケーションを作成します。 そのアプリケーションがまだ存在しない場合は、動的に作成され、記憶されます。
このディスパッチャは、次のように使用できます。
パスによるディスパッチ
URLのパスによるディスパッチは非常に似ています。 Host
ヘッダーを調べてサブドメインを特定する代わりに、最初のスラッシュまでの要求パスを調べるだけです。
これとサブドメインの大きな違いは、作成者関数がNone
を返す場合、これは別のアプリケーションにフォールバックすることです。