FastAPI项目命名约定/结构

2024-10-02 22:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

对于小型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用户模型,SchemaCompany包含Pydantic公司模型,等等)。问题是,名称空间变得有点过于杂乱和冗余,因为每个类或函数调用都需要我键入,例如,SchemaReview.ReviewModelUser.Usercrud_company.get_companies(你知道了)

我更希望有类似model.Userschema.Companycrud.get_reviews的东西,但为了实现这一点,我必须将每个模型放在一个model.py文件中,将每个模式放在一个schema.py文件中,等等,这正是我试图通过模块化代码来避免的

那么,这里最好的方法是什么?我曾考虑过为导入添加别名,但这可能会导致过程中出现不一致的情况,我不想对此进行讨论。因此,我认为理想的方法来自目录/文件名约定,这将迫使我保持一致性

所有的想法都会来的。谢谢


Tags: 文件py模型getmodelschema情况company
1条回答
网友
1楼 · 发布于 2024-10-02 22:23:10

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

我见过这样一种惯例:从不在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_案例更实用的原因

您还可以在github的fastapi repository中将问题作为问题发布

相关问题 更多 >