包含 WSGI - Flask,Django,其它

您可以挂载多个 WSGI 应用,正如您在 Sub Applications - Mounts, Behind a Proxy 中所看到的那样。

为此, 您可以使用 WSGIMiddleware 来包装你的 WSGI 应用,如:Flask,Django,等等。

使用 WSGIMiddleware

您需要导入 WSGIMiddleware

然后使用该中间件包装 WSGI 应用(例如 Flask)。

之后将其挂载到某一个路径下。

  1. from fastapi import FastAPI
  2. from fastapi.middleware.wsgi import WSGIMiddleware
  3. from flask import Flask, request
  4. from markupsafe import escape
  5. flask_app = Flask(__name__)
  6. @flask_app.route("/")
  7. def flask_main():
  8. name = request.args.get("name", "World")
  9. return f"Hello, {escape(name)} from Flask!"
  10. app = FastAPI()
  11. @app.get("/v2")
  12. def read_main():
  13. return {"message": "Hello World"}
  14. app.mount("/v1", WSGIMiddleware(flask_app))

检查

现在,所有定义在 /v1/ 路径下的请求将会被 Flask 应用处理。

其余的请求则会被 FastAPI 处理。

如果您使用 Uvicorn 运行应用实例并且访问 http://localhost:8000/v1/,您将会看到由 Flask 返回的响应:

  1. Hello, World from Flask!

并且如果您访问 http://localhost:8000/v2,您将会看到由 FastAPI 返回的响应:

  1. {
  2. "message": "Hello World"
  3. }