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",
]
相关推荐
坐吃山猪2 分钟前
从 Prompt 到 Harness:AI 能力边界扩展的完整脉络
人工智能·prompt
我的愿望是成为富婆3 分钟前
2027校招AI产品经理能力清单:数据科学与大数据技术专业如何准备
大数据·人工智能·产品经理
空空dream4 分钟前
03 | 更新:Ollama 换成 llama.cpp构建更小的离线镜像
人工智能·语言模型·llama
单向箔4 分钟前
08|一套可复制的 AI Coding 流程:从需求到提交怎么走
人工智能·prompt·ai编程
AI棒棒牛7 分钟前
YOLO26 改进:融合 LW-DETR 思想的轻量 TokenMixer,让 Neck 从局部堆叠走向局部-全局协同!嘎嘎创新!
人工智能·深度学习·yolo·目标检测
IT研究室10 分钟前
最新计算机毕业设计选题推荐-基于spring boot的幼儿园管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
Alinket11 分钟前
毫米波雷达 vs 摄像头 vs 手环:养老跌倒监测三类方案怎么选
网络·数据库·健康医疗·信息与通信·iot
老周聊架构11 分钟前
领域模型进化:GRPO 强化学习与 Post-training Engineering
强化学习·grpo
会编程的吕洞宾12 分钟前
Spring Cloud Gateway限流实战 Redis令牌桶算法+熔断降级
java·后端·spring
Hello.Reader12 分钟前
REA 深度实战让 AI Agent 学会逆向工程,从软件行为分析到二进制原理还原
人工智能