fastapi项目拆分实战数据模型

schemas/init.py 标准写法(两种方案,按需选择)

目录回顾

复制代码
项目根目录/
├── main.py
├── schemas/
    ├── __init__.py
    ├── user.py
    └── product.py
└── routers/
    ├── users.py
    └── products.py

方案1:推荐!统一导出(外部导入更简洁)

schemas/init.py

python 复制代码
# 从同目录文件导入模型,并对外暴露
from .user import UserCreate, UserUpdate, UserResponse
from .product import ProductCreate, ProductUpdate, ProductResponse

# 可选:显式声明允许导出的变量,编辑器提示更友好
__all__ = [
    "UserCreate",
    "UserUpdate",
    "UserResponse",
    "ProductCreate",
    "ProductUpdate",
    "ProductResponse",
]

好处

之后在 routers/users.py 可以这样导入:

python 复制代码
# 绝对导入(推荐工程使用)
from schemas import UserCreate, UserResponse

# 相对导入写法
from ..schemas import UserCreate, UserResponse

不用写长长的 from schemas.user import xxx,代码清爽。

方案2:极简写法(不做聚合,不用修改 init.py)

__init__.py 可以空白文件 ,什么都不写。

导入时必须写完整路径:

python 复制代码
from schemas.user import UserCreate, UserResponse
from schemas.product import ProductUpdate

适合超大型项目,模块极多,不希望全部聚合在顶层。

实操示例对比

开启聚合(方案1)✅

python 复制代码
# routers/users.py
from schemas import UserCreate, UserResponse

不聚合(方案2,空init)

python 复制代码
# routers/users.py
from schemas.user import UserCreate, UserResponse

重要小知识点

  1. __init__.py 作用:让 schemas 文件夹被识别为Python包;没有它旧版本Python无法导入。
  2. __all__ 控制 from xxx import * 能拿到哪些对象,规范项目建议加上。
  3. 新增模型时,记得同步更新 __init__.py__all__

扩展示范(如果你后续新增order.py

schemas/order.py

python 复制代码
from pydantic import BaseModel
class OrderCreate(BaseModel):
    pid: int
    num: int

更新 schemas/init.py

python 复制代码
from .user import UserCreate, UserUpdate, UserResponse
from .product import ProductCreate, ProductUpdate, ProductResponse
from .order import OrderCreate

__all__ = [
    "UserCreate",
    "UserUpdate",
    "UserResponse",
    "ProductCreate",
    "ProductUpdate",
    "ProductResponse",
    "OrderCreate",
]
相关推荐
祈禾1 小时前
Redis三大特殊数据类型
运维·服务器·数据库·redis·笔记·缓存
东方护航数据恢复(深圳)1 小时前
MySQL_Oracle数据库崩溃修复全攻略_东方护航数据恢复深圳店
数据库·mysql·oracle
watersink2 小时前
机器学习HMM
人工智能·机器学习
东方小月2 小时前
从零开发一个 Coding Agent(九):实现 Agent 的工具调用闭环
人工智能·前端框架·node.js
Luhui Dev2 小时前
如何在 WorkBuddy 中使用大角几何:从 MCP 接入到 AI 几何作图
人工智能·数学·算法·agent·luhuidev
燐妤2 小时前
中老年智能健康管理项目
python·ai·pycharm·vue3·fastapi·项目开发·健康
四代水门2 小时前
三、计算机网络
服务器·计算机网络·asp.net
孙启超2 小时前
【AI应用开发】什么是混合检索(Hybrid Search)?向量检索 + BM25 关键词检索,适用场景与 RRF 融合原理
人工智能·缓存·llm·向量数据库·bm25·向量化·ai应用开发