FastAPI 项目命名约定/结构

问题描述 投票:0回答:1

我有一个小型 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 模型等)。问题是,命名空间变得有点过于混乱和多余,因为每个类或函数调用都需要我输入,例如,

SchemaReview.Review
ModelUser.User
crud_company.get_companies
(你明白了)。

我更愿意拥有像

model.User
schema.Company
crud.get_reviews
这样的东西,但为了实现这一点,我必须将每个模型放在一个
model.py
文件中,每个模式放在一个
schema.py
中文件等,这正是我试图通过模块化代码来避免的。

那么,最好的方法是什么?我曾考虑过对导入使用别名,但这可能会导致整个过程中出现不一致,我不想陷入其中。所以我认为理想的方法来自目录/文件名约定,这将迫使我保持连贯性。

欢迎所有想法。谢谢!

python module project naming-conventions directory-structure
1个回答
6
投票

查看 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 import ModelReview

然后您可以

import models
并在整个代码中使用
models.User
。如果您使用 PascalCase 作为文件名,这可能会产生命名冲突,因此这也是 Snake_case 更实用的原因。

仅供参考,您还可以在 FastAPI 讨论区发布问题。

© www.soinside.com 2019 - 2024. All rights reserved.