FastAPI 项目命名 conventions/structure

FastAPI project naming conventions/structure

我有以下结构(相关部分)用于小API:

app
 |--main.py
 |-models
   |--base.py
   |--ModelUser.py
   |--ModelCompany.py
   |--ModelUser.py
 |-schemas
   |--SchemaUser.py
   |--SchemaCompany.py
   |--SchemaReview.py
 |-routes
   |--auth_router.py
   |--companies_router.py
   |_users_router.py
 |-utils
   |--crud_company.py
   |--crud_review.py
   |--crud_user.py

在大多数情况下,它可以工作并保持可接受的关注点分离度(即,UserModel 包含 SQLAlchemy User 模型,SchemaCompany 包含 Pydantic Company 模型等)。问题是,命名空间变得有点过于混乱和冗余,因为每个 class 或函数调用都需要我键入,例如 SchemaReview.ReviewModelUser.Usercrud_company.get_companies (你明白了)。

我更喜欢 model.Userschema.Companycrud.get_reviews 之类的东西,但为了实现这一点,我必须将每个模型都放在一个 [=18] 中=] 文件,单个 schema.py 文件中的每个模式,等等,这正是我试图通过模块化代码来避免的。

那么,最好的方法是什么?我曾考虑过对导入进行别名处理,但这可能会导致过程中出现不一致,我不想深入探讨。所以我认为理想的方法来自 directory/filename 约定,这将迫使我保持​​连贯性。

欢迎所有想法。谢谢!

查看 FastAPI-Postgres App 的 FastAPI 创建者模板。

我看到了从不在 PascalCase 中命名 python 文件并专门使用 snake_case 的约定。

实现model.User的方法是在相关文件的__init__.py中导入相关的类。

假设models.__init__.py

from .ModelUser import User
from .ModelCompany import Company
from .ModelReview impart ModelReview

然后您可以 import models 并在整个代码中使用 models.User。如果您对文件名使用 PascalCase,这可能会造成命名冲突,所以这也是 snake_case 更实用的原因。

您还可以 post 在 fastapi repository 中 github 提出问题。