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

标签 python fastapi

我想解决的问题:

  • 目录的好名称,以便其目的明确。
  • 将所有项目文件(包括 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/

    相关文章:

    python - Pandas 将 int 转换为标签类

    python - 具有非字母数字字符的字段名称的 Pydantic 模型

    gunicorn - 在 ubuntu 服务器上使用 uvicorn 运行 fastapi 应用程序

    python - 有没有办法干净地杀死 uvicorn?

    python - 使用 fastapi-contrib 的 FastApi 分页错误

    python - 字符串格式python

    python - 在 .csv 文件中读取时,我似乎无法指定列数据类型

    python - 如何实现 Django 查询过滤器表达式 API 的 kwarg 语法(例如 `related_model__fieldname__condition` )?

    javascript - 在本地主机中获取 FastApi 的 JavaScript

    python - tf.keras 和 tf.python.keras 有什么区别?