包含 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, escape, request
  4. flask_app = Flask(__name__)
  5. @flask_app.route("/")
  6. def flask_main():
  7. name = request.args.get("name", "World")
  8. return f"Hello, {escape(name)} from Flask!"
  9. app = FastAPI()
  10. @app.get("/v2")
  11. def read_main():
  12. return {"message": "Hello World"}
  13. 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. }