我有一个小型 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
文件中,等等,这正是我正在尝试的通过模块化代码来避免。
那么,这里最好的方法是什么?我曾考虑过对导入进行别名处理,但这可能会导致过程中出现不一致,我不想深入探讨。所以我认为理想的方法来自目录/文件名约定,这将迫使我保持连贯性。
欢迎所有想法。谢谢!
最佳答案
查看 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
然后您可以导入模型
并在整个代码中使用models.User
。如果您对文件名使用 PascalCase,这可能会产生命名冲突,因此这也是 snake_case 更实用的原因。
您也可以在 fastapi repository 中将问题作为议题发布在 github 上。
关于python - FastAPI 项目命名约定/结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66912516/