Files
2026-09-21 17:39:16 +08:00

99 lines
4.7 KiB
Python

# 校验时间,入学时间小于毕业时间,
from datetime import datetime
from datetime import date
from pydantic import BaseModel, field_validator, Field, ConfigDict
# 请求体模型:两个日期都允许为空 在api.studend调用检测
class StudentDate(BaseModel):
enrollment_date: str | None = Field(default=None, description="入学日期,格式为 yyyy-MM-dd,非必填")
graduation_date: str | None = Field(default=None, description="毕业日期,格式 yyyy-MM-dd,非必填")
# 日期校验函数
def student_date(enrollment_date: str , graduation_date: str):
# 情况1:两个日期都没传,直接通过
if not enrollment_date and not graduation_date:
return "时间校验通过"
# 只传了入学日期或者毕业日期,只校验格式
if enrollment_date and not graduation_date:
try:
datetime.strptime(enrollment_date, "%Y-%m-%d")
except ValueError:
return "入学日期格式错误,请按照 yyyy-MM-dd 输入"
return "时间校验通过"
elif graduation_date and not enrollment_date:
try:
datetime.strptime(graduation_date, "%Y-%m-%d")
except ValueError:
return "毕业日期格式错误,请按照 yyyy-MM-dd 输入"
return "时间校验通过"
# 如果两个日期都传了,先分别校验格式,再校验先后顺序
try:
enrollment_date = datetime.strptime(enrollment_date, "%Y-%m-%d")
except ValueError:
return "入学日期格式错误,请按照 yyyy-MM-dd 输入"
try:
graduation_date = datetime.strptime(graduation_date, "%Y-%m-%d")
except ValueError:
return "毕业日期格式错误,请按照 yyyy-MM-dd 输入"
# 核心业务判断:毕业时间不能早于入学时间
if graduation_date < enrollment_date:
return "毕业时间必须晚于入学时间"
return "时间校验通过"
#创建学生的请求体 ...(必填)
class StudentCreate(BaseModel):
id: str = Field(..., min_length=1, max_length=20, description="学号")
name: str = Field(..., min_length=1, max_length=50, description="学生姓名")
gender: str = Field(..., pattern=r"^(男|女)$", description="性别:男/女")
class_name: str = Field(..., min_length=1, max_length=20, description="所属班级编号")
#非必填
age: int | None = Field(default=None, ge=1, le=100, description="年龄")
hometown: str | None = Field(default=None, max_length=100, description="籍贯")
graduate_school: str | None = Field(default=None, max_length=100, description="毕业院校")
major: str | None = Field(default=None, max_length=50, description="专业")
education: str | None = Field(default=None, max_length=30, description="学历:专科/本科/硕士")
enrollment_date: date | None = Field(default=None, description="入学时间,格式yyyy-MM-dd")
graduation_date: date | None = Field(default=None, description="毕业时间,格式yyyy-MM-dd")
status: str | None = Field(default="在读", description="状态:未毕业/进入就业/已就业")
# 更新修改学生
class StudentUpdate(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=50, description="学生姓名")
class_name: str | None = Field(default=None, description="班级名称")
gender: str | None = Field(default=None, pattern=r"^(男|女)$", description="性别:男/女")
class_no: str | None = Field(default=None, max_length=20, description="所属班级编号")
age: int | None = Field(default=None, ge=1, le=100, description="年龄")
hometown: str | None = Field(default=None, max_length=100, description="籍贯")
graduate_school: str | None = Field(default=None, max_length=100, description="毕业院校")
major: str | None = Field(default=None, max_length=50, description="专业")
education: str | None = Field(default=None, max_length=30, description="学历")
enrollment_date: date | None = Field(default=None, description="入学时间")
graduation_date: date | None = Field(default=None, description="毕业时间")
status: str | None = Field(default=None, description="状态:未毕业/进入就业/已就业")
# 响应体
class StudentResponse(BaseModel):
model_config = ConfigDict(from_attributes=True) #支持读取SQLAlchemy ORM对象属性
id: str
name: str
gender: str
class_name: str | None = None
age: int | None = None
hometown: str | None = None
graduate_school: str | None = None
major: str | None = None
education: str | None = None
enrollment_date: date | None = None
graduation_date: date | None = None
status: str | None = None
is_deleted: bool = False