python - FastAPI 项目命名约定/结构

标签 python module project naming-conventions directory-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 模型等)。问题是,命名空间变得有点过于困惑和冗余,因为每个类或函数调用都需要我键入,例如 SchemaReview.ReviewModelUser.Usercrud_company.get_companies(你懂的)。

我宁愿有像 model.Userschema.Companycrud.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/

相关文章:

python - 尝试使用 Azure 存储在 Django 中获取 image.size 时出现 NotImplementedError

python - 属性错误 : module '' has no attribute '__path__'

python-3.x - Python3 从同级目录导入模块/包

c# - 模型 View 演示器框架 : In which project should the interfaces live?

java - 在 jdeveloper 10g 中导出 war 文件

python - 模块 'pip' 没有属性 'pep425tags'

python - 导入资源文件

python - Plotly:当点超过 20 时,散点图标记消失

javascript - 如何使用 type=module 脚本中的代码

javascript - 可以在 Web 浏览器中捕获所有事件吗?