项目代码提交
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import re
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel, Field, field_serializer, field_validator #进门校验钩子
|
||||
from model.advisor_model import GenderEnum
|
||||
|
||||
#顾问信息请求体数据进入模型 用Field进门校验
|
||||
class AdvisorCreate(BaseModel):
|
||||
advisor_name:str =Field(...,min_length=2,max_length=10)
|
||||
# 电话:非必填;填了必须是11位纯数字
|
||||
phone:str|None = None
|
||||
# 性别:枚举类型,只接受 男 / 女
|
||||
gender:GenderEnum|None = None
|
||||
|
||||
@field_validator("phone")
|
||||
@classmethod
|
||||
def validate_phone(cls,v):
|
||||
if v is None:
|
||||
return v
|
||||
if not re.fullmatch(r"\d{11}",v):
|
||||
raise ValueError("电话号码必须是11位纯数字")
|
||||
return v
|
||||
|
||||
#顾问信息更改删除状态
|
||||
class AdvisorStatus(BaseModel):
|
||||
flag: int = Field(ge=0, le=1)
|
||||
|
||||
#顾问信息响应体返回模型
|
||||
class StudentOut(BaseModel):
|
||||
student_no: str
|
||||
student_name: str
|
||||
enrollment_time: datetime
|
||||
graduation_time: datetime
|
||||
advisor_id: int
|
||||
class Config:
|
||||
from_attributes = True #允许 Pydantic 从 ORM 对象的属性上取值(student.student_name),而不是只从字典取——没有这行
|
||||
|
||||
|
||||
|
||||
class AdvisorOut(BaseModel):
|
||||
id:int
|
||||
advisor_name:str
|
||||
flag:int
|
||||
phone:str|None = None
|
||||
gender:GenderEnum|None = None
|
||||
class Config:
|
||||
from_attributes=True # 允许把 ORM 对象(Advisor)直接转成这个模型
|
||||
|
||||
@field_serializer("phone")
|
||||
def mask_phone(self,value):
|
||||
# 返回时把中间四位加密:13812345678 -> 138****5678
|
||||
if value is None:
|
||||
return None
|
||||
return value[:3] + "****" + value[7:]
|
||||
|
||||
|
||||
#AdvisorCreate:数据是前端传来的 JSON,
|
||||
# FastAPI 直接把 JSON 转成这个对象.来源是"普通字典",所以什么都不用配。
|
||||
#AdvisorOut:返回信息存在数据库里的 Advisor 对象的属性里
|
||||
Reference in New Issue
Block a user