gpt4 book ai didi

python - 构建 FastAPI 项目的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-03 14:13:33 25 4
gpt4 key购买 nike

我想解决的问题:

  • 目录的好名称,以便其目的明确。
  • 将所有项目文件(包括 virtualenv)保存在一个地方,所以我
    可以轻松复制、移动、存档、删除整个项目或估算磁盘
    空间使用。
  • 创建某些选定文件集的多个副本,例如整个
    应用程序、存储库或 virtualenv,同时保留单个副本
    我不想克隆的其他文件。
  • 只需通过 rsyncing 将正确的文件集部署到服务器
    选择了一个目录。
  • 很好地处理了前端和后端。
  • 最佳答案

    Harsha 已经提到了我的 project generator,但我认为这对 future 的读者解释它背后的想法会有所帮助。
    如果你打算为你的前端服务,比如 yarn npm 。您不必担心它们之间的结构。使用 axios 或 Javascript 的 fetch 之类的东西,您可以从任何地方轻松地与后端对话。
    在构建后端时,如果你想用 Jinja 渲染模板,你可以拥有一些接近 MVC 模式的东西。

    your_project
    ├── __init__.py
    ├── main.py
    ├── core
    │ ├── models
    │ │ ├── database.py
    │ │ └── __init__.py
    │ ├── schemas
    │ │ ├── __init__.py
    │ │ └── schema.py
    │ └── settings.py
    ├── tests
    │ ├── __init__.py
    │ └── v1
    │ ├── __init__.py
    │ └── test_v1.py
    └── v1
    ├── api.py
    ├── endpoints
    │ ├── endpoint.py
    │ └── __init__.py
    └── __init__.py
    通过在任何地方使用 __init__,我们可以从整个应用程序访问变量,就像 Django 一样。
    让我们将文件夹分成几部分:
  • 核心
  • 模型
  • database.py

  • 模式
  • users.py
  • something.py

  • settings.py
  • 查看 (如果要渲染模板,请添加此项)
  • v1_views.py
  • v2_views.py


  • 测试
  • v1
  • v2

  • 楷模
    它适用于您的数据库模型,通过这样做,您可以从 v1 和 v2 导入相同的数据库 session 或对象。
    模式
    Schemas 是您的 Pydantic 模型,我们称其为 schemas,因为它实际上用于创建 OpenAPI 模式,因为 FastAPI 基于 OpenAPI 规范,我们在任何地方都使用模式,从 Swagger 生成到端点的预期请求正文。
    设置.py
    它适用于 Pydantic's Settings Management,非常有用,您可以使用相同的变量而无需重新声明它,看看它对您有何用处,请查看我们的 Settings and Environment Variables 文档
    观看次数
    如果您要使用 Jinja 呈现前端,则这是可选的,您可以使用类似于 MVC 模式的内容
  • 核心
  • 意见
  • v1_views.py
  • v2_views.py



  • 如果你想添加 View ,它看起来像这样。
    测试
    最好将测试放在后端文件夹中。
    蜜蜂
    由 APIRouter 独立创建它们,而不是将所有 API 收集在一个文件中。
    笔记
    您可以对所有导入使用绝对导入,因为我们在任何地方都使用 __init__,请参阅 Python's packaging 文档。
    因此,假设您尝试从 v2 导入 o​​jit_strong v1 的 endpoint.py ,您可以简单地执行
    from my_project.v1.endpoints.endpoint import something

    关于python - 构建 FastAPI 项目的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64943693/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com