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",
]
相关推荐
Teable任意门互动10 小时前
破解多平台数据不通!江浙沪跨境电商外贸业务私有化部署方案|任意门互动科技
大数据·人工智能·科技·信息可视化·信息与通信
自养Agent10 小时前
AI 私有化实战:多模态本地化·视觉与音频怎么装下
人工智能·大模型·llm·音视频·语音识别
miofly10 小时前
美团龙猫发布 LongCat-2.5:1.6T 参数原生多模态模型,主攻长程智能体任务
人工智能
codigger10 小时前
同一个端口能不能被两个程序同时监听?
java·后端·程序员·编程
西索斯coding10 小时前
qwen3.8-max-0902 和 minimax-m3 改真实仓库差多少?2026 年 50 个缺陷复现实测框架
java·服务器·网络·ai
lm down10 小时前
IndexTTS 2/2.5 轻量版、Qwen3-TTS 轻量版:支持AMD、Intel、NVIDIA显卡和Mac,2GB显存可跑
人工智能·ai·音视频·tts
2501_9339232510 小时前
SpringCloud:OpenFeign快速实现
java·后端·spring cloud·openfeign
一万年太久。10 小时前
mysql主从复制
数据库·mysql
johnsong10 小时前
AI前沿日报 · 2026-11-01 | 资本狂潮与安全崩塌 —— 当AI大国博弈遇上供应链暗战
人工智能·安全
码途行者10 小时前
Linux 服务器 Golang 安装及环境变量配置
linux·运维·服务器