Dij*_*e85 4 python module directory-structure project naming-conventions
我有一个小型 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
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,它可以工作并保持可接受的关注点分离程度(即,UserModel 包含 SQLAlchemy User 模型,SchemaCompany 包含 Pydantic Company 模型等)。问题是,命名空间变得有点过于混乱和多余,因为每个类或函数调用都需要我输入,例如,SchemaReview.Review或ModelUser.User或crud_company.get_companies(你明白了)。
我更愿意有类似model.User, schema.Companyand的东西crud.get_reviews,但为了实现这一点,我必须将每个模型放在一个model.py文件中,将每个模式放在一个schema.py文件中,等等,这正是我试图避免的模块化代码。
那么,这里最好的方法是什么?我曾考虑过对导入使用别名,但这可能会导致整个过程中出现不一致,我不想陷入其中。所以我认为理想的方法来自目录/文件名约定,这将迫使我保持连贯性。
欢迎所有想法。谢谢!
小智 7
查看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
Run Code Online (Sandbox Code Playgroud)
然后您就可以import models并且已经models.User在整个代码中使用了。如果您使用 PascalCase 作为文件名,这可能会产生命名冲突,因此这也是 Snake_case 更实用的原因。