【问题标题】:Django + FastAPIDjango + FastAPI
【发布时间】:2022-12-25 12:31:15
【问题描述】:

我可以在输入终端时运行 FastAPI 服务器吗

python manage.py runserver

我想当 Django 服务器已经运行时他也运行 fastapi 服务器,这样我就可以在浏览器中做类似的事情('api/' -> 给我 FastAPI),但是当('django/'-> 给我 Django - > 根页面我的项目)。一般来说,我想通过一些路径访问 API,以及一个成熟的 Django 站点,该站点将使用此 API 来达到其目的,并带有模板等。这样用户就可以随时在它们之间切换

【问题讨论】:

    标签: django fastapi


    【解决方案1】:

    是的,有可能与 Django 服务器一起运行 FastAPI 服务器。一种方法是使用单独的进程或线程来运行 FastAPI 服务器,然后使用反向代理根据 URL 路径将请求路由到适当的服务器。

    以下是如何设置的示例:

    1. 安装 FastAPI 和 API 所需的任何其他依赖项。

    2. 为您的 FastAPI 应用程序创建一个文件,例如 api.py,并像往常一样定义您的 FastAPI 路由和函数。

    3. 要启动 FastAPI 服务器,您可以使用 uvicorn 库来运行 服务器在一个单独的进程中。例如:

      import uvicorn
      from api import app
      if __name__ == "__main__":
         uvicorn.run(app, host="0.0.0.0", port=8000)
      
    4. 在您的 Django 项目中,您可以使用 subprocess 模块在 Django 服务器启动时将 FastAPI 服务器作为一个单独的进程启动。您可以在 manage.py 文件中执行此操作,例如:

      import subprocess
      if __name__ == "__main__":
          subprocess.Popen(["python", "api.py"])
          execute_from_command_line(sys.argv)
      
    5. 要根据 URL 路径将请求路由到适当的服务器,您可以使用反向代理,例如 Nginx。在您的 Nginx 配置中,您可以使用 location 指令指定对 /api/ 路径的请求应转发到 FastAPI 服务器,而对其他路径的请求应转发到 Django 服务器。例如:

      server {
          listen 80;
          server_name example.com;
      
      location /api/ {
          proxy_pass http://localhost:8000;
          }
      
      location / {
          proxy_pass http://localhost:8000;
          }
       }
      

      使用此设置,对http://example.com/api/ 的请求将被转发到 FastAPI 服务器,而对其他路径的请求将被转发到 Django 服务器。然后,您可以使用 FastAPI 服务器处理 API 请求,并使用 Django 服务器处理常规 Web 请求。

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 2022-07-20
      • 2020-12-22
      • 2022-08-18
      • 2021-11-09
      • 2020-12-08
      • 2021-03-28
      • 2021-10-08
      • 2021-08-30
      相关资源
      最近更新 更多