コンテンツにスキップ

WSGI の組み込み - Flask、Django など

🌐 AI と人間による翻訳

この翻訳は、人間のガイドに基づいて AI によって作成されました。🤝

原文の意図を取り違えていたり、不自然な表現になっている可能性があります。🤖

AI LLM をより適切に誘導するのを手伝う ことで、この翻訳を改善できます。

英語版

サブアプリケーション - マウントプロキシの背後 で見たように、WSGI アプリケーションをマウントできます。

そのために WSGIMiddleware を使用して、Flask や Django などの WSGI アプリをラップできます。

WSGIMiddleware の使用

情報

これには a2wsgi のインストールが必要です。例: pip install a2wsgi

a2wsgi から WSGIMiddleware をインポートします。

次に、そのミドルウェアで WSGI(例: Flask)アプリをラップします。

そして、それをあるパスの下にマウントします。

from a2wsgi import WSGIMiddleware
from fastapi import FastAPI
from flask import Flask, request
from markupsafe import escape

flask_app = Flask(__name__)


@flask_app.route("/")
def flask_main():
    name = request.args.get("name", "World")
    return f"Hello, {escape(name)} from Flask!"


app = FastAPI()


@app.get("/v2")
def read_main():
    return {"message": "Hello World"}


app.mount("/v1", WSGIMiddleware(flask_app))
🤓 Other versions and variants
from a2wsgi import WSGIMiddleware
from fastapi import FastAPI
from flask import Flask, request
from markupsafe import escape

flask_app = Flask(__name__)


@flask_app.route("/")
def flask_main():
    name = request.args.get("name", "World")
    return f"Hello, {escape(name)} from Flask!"


app = FastAPI()


@app.get("/v2")
def read_main():
    return {"message": "Hello World"}


app.mount("/v1", WSGIMiddleware(flask_app))

備考

以前は fastapi.middleware.wsgiWSGIMiddleware を使用することが推奨されていましたが、現在は非推奨です。

代わりに a2wsgi パッケージを使用することを推奨します。使い方は同じです。

a2wsgi パッケージがインストールされていることを確認し、a2wsgi から WSGIMiddleware を正しくインポートしてください。

チェック

これで、パス /v1/ 配下へのすべてのリクエストは Flask アプリケーションが処理します。

それ以外は FastAPI が処理します。

実行して http://localhost:8000/v1/ にアクセスすると、Flask からのレスポンスが表示されます:

Hello, World from Flask!

さらに http://localhost:8000/v2 にアクセスすると、FastAPI からのレスポンスが表示されます:

{
    "message": "Hello World"
}