学生管理系统代码提交
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# scheme/users.py
|
||||
# 用户认证模块的请求/响应模型
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
|
||||
|
||||
# -------------------- 请求体模型 -----------------------------
|
||||
class UserAdd(BaseModel):
|
||||
"""创建用户(仅管理员)"""
|
||||
username: str = Field(..., min_length=3, max_length=50, description="登录名")
|
||||
password: str = Field(..., min_length=6, max_length=64, description="密码(明文,服务端加密存储)")
|
||||
role: str = Field(..., description="角色:admin/teacher/student")
|
||||
teacher_id: Optional[int] = Field(None, ge=1, description="教师角色的工号")
|
||||
stu_id: Optional[int] = Field(None, ge=1, description="学生角色的学号")
|
||||
|
||||
@field_validator("role")
|
||||
@classmethod
|
||||
def validate_role(cls, v):
|
||||
allowed = ["admin", "teacher", "student"]
|
||||
if v not in allowed:
|
||||
raise ValueError(f"role 必须是 {allowed} 之一,当前值: {v}")
|
||||
return v
|
||||
|
||||
|
||||
class UserLogin(BaseModel):
|
||||
"""登录"""
|
||||
username: str = Field(..., description="登录名")
|
||||
password: str = Field(..., description="密码")
|
||||
|
||||
|
||||
# -------------------- 响应模型 ----------------------------
|
||||
class UserResponse(BaseModel):
|
||||
user_id: int
|
||||
username: str
|
||||
role: str
|
||||
teacher_id: Optional[int] = None
|
||||
stu_id: Optional[int] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class TokenResponse(BaseModel):
|
||||
"""登录成功返回"""
|
||||
access_token: str = Field(..., description="JWT token")
|
||||
token_type: str = Field("bearer", description="token 类型")
|
||||
user: UserResponse
|
||||
|
||||
|
||||
class MessageResponse(BaseModel):
|
||||
"""通用消息响应"""
|
||||
message: str
|
||||
Reference in New Issue
Block a user