Files

35 lines
1.8 KiB
Python
Raw Permalink Normal View History

2026-09-21 19:15:28 +08:00
from pydantic import BaseModel, Field, ConfigDict # BaseModel=模型基类,Field=字段规则,ConfigDict=模型配置
from datetime import date # Python的日期类型(只有年月日)
from typing import Optional # Optional[X] 表示"可以是X,也可以是None"
# ---------------- 请求模型 ----------------
# 新增班级:class_id、start_time 必填
# 请求模型 = 前端传过来的数据长什么样,FastAPI自动帮你校验
class ClassCreate(BaseModel):# 新增班级的入参模型:POST新增时,请求体必须符合这个结构
class_id: int = Field(..., ge=1, description="班级编号,正整数,不能重复")
start_time: date = Field(..., description="开班日期,格式 yyyy-MM-dd")
# description:这行字会显示在Swagger文档里,方便前端看
# 修改班级:字段可选,前端传哪个改哪个(局部更新)
class ClassUpdate(BaseModel):
# class_id: int = Field( ge=1, description="班级编号,可选") 被注释掉 = 不允许修改班级编号
start_time: Optional[date] = Field(None, description="开班日期,格式 yyyy-MM-dd")
# Optional[date] = 可以传日期也可以不传;Field(None) = 不传时默认值是None
# ---------------- 响应模型 ----------------
# 响应模型:后端返回给前端的数据结构,from_attributes 允许直接从 ORM (Classinfo实例)的属性取值,不用手动一个个赋值
class ClassResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
class_id: int # 返回字段:班级编号
start_time: date# 返回字段:开班日期
#逻辑:**三个模型管三种场景**—— 新增(必填)、修改(可选)、响应(输出)。
# 前端传错类型 / 缺字段,FastAPI 直接返回 422,不会把脏数据送进数据库。