jackkuo's picture
Add Hugging Face Space deployment
35e7795
Raw
History Blame Contribute Delete
3.07 kB
"""用户相关的Pydantic模型"""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
class UserBase(BaseModel):
"""用户基础模型"""
username: str = Field(..., description="用户名", min_length=3, max_length=50)
full_name: Optional[str] = Field(None, description="全名", max_length=100)
organization: Optional[str] = Field(None, description="单位", max_length=100)
team: Optional[str] = Field(None, description="团队", max_length=100)
species: Optional[str] = Field(None, description="物种", max_length=100)
is_active: bool = Field(True, description="是否激活")
is_superuser: bool = Field(False, description="是否超级用户")
class UserCreate(UserBase):
"""创建用户模型"""
password: str = Field(..., description="密码哈希值(SHA-256)", min_length=64)
class UserUpdate(BaseModel):
"""更新用户模型"""
username: Optional[str] = Field(
None, description="用户名", min_length=3, max_length=50
)
full_name: Optional[str] = Field(None, description="全名", max_length=100)
organization: Optional[str] = Field(None, description="单位", max_length=100)
team: Optional[str] = Field(None, description="团队", max_length=100)
species: Optional[str] = Field(None, description="物种", max_length=100)
password: Optional[str] = Field(
None, description="密码哈希值(SHA-256)", min_length=64
)
is_active: Optional[bool] = Field(None, description="是否激活")
is_superuser: Optional[bool] = Field(None, description="是否超级用户")
class User(UserBase):
"""用户模型"""
id: int = Field(..., description="用户ID")
created_at: datetime = Field(..., description="创建时间")
updated_at: datetime = Field(..., description="更新时间")
class Config:
from_attributes = True
class UserRegister(BaseModel):
"""用户注册模型"""
username: str = Field(..., description="用户名", min_length=3, max_length=50)
password: str = Field(..., description="密码哈希值(SHA-256)", min_length=64)
full_name: Optional[str] = Field(None, description="全名", max_length=100)
organization: Optional[str] = Field(None, description="单位", max_length=100)
team: Optional[str] = Field(None, description="团队", max_length=100)
species: Optional[str] = Field(None, description="物种", max_length=100)
class UserLogin(BaseModel):
"""用户登录模型"""
username: str = Field(..., description="用户名", min_length=3, max_length=50)
password: str = Field(
..., description="密码哈希值(SHA-256+时间戳)", min_length=64
)
timestamp: int = Field(..., description="时间戳(Unix时间戳,秒)")
class Token(BaseModel):
"""登录令牌模型"""
access_token: str = Field(..., description="访问令牌")
token_type: str = Field(default="bearer", description="令牌类型")
user: User = Field(..., description="用户信息")