Saltar al contenido

Incluyendo WSGI - Flask, Django, otros

Puedes montar aplicaciones WSGI como viste con Sub Applications - Mounts, Behind a Proxy.

Para eso, puedes usar el WSGIMiddleware y usarlo para envolver tu aplicación WSGI, por ejemplo, Flask, Django, etc.

Usando WSGIMiddleware

Nota

Esto requiere instalar a2wsgi por ejemplo con pip install a2wsgi.

Necesitas importar WSGIMiddleware de a2wsgi.

Luego envuelve la aplicación WSGI (ej. Flask) con el middleware.

Y luego monta eso bajo un path.

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))

Nota

Anteriormente, se recomendaba usar WSGIMiddleware de fastapi.middleware.wsgi, pero ahora está deprecado.

Se aconseja usar el paquete a2wsgi en su lugar. El uso sigue siendo el mismo.

Solo asegúrate de tener el paquete a2wsgi instalado e importar WSGIMiddleware correctamente de a2wsgi.

Revísalo

Ahora, cada petición bajo el path /v1/ será manejada por la aplicación Flask.

Y el resto será manejado por FastAPI.

Si lo ejecutas y vas a http://localhost:8000/v1/ verás la respuesta de Flask:

Hello, World from Flask!

Y si vas a http://localhost:8000/v2 verás la respuesta de FastAPI:

{
    "message": "Hello World"
}