from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator class RegisterRequest(BaseModel): username: str = Field(min_length=1, max_length=64) password: str = Field(min_length=6, max_length=128) confirm_password: str = Field(min_length=6, max_length=128, alias="confirmPassword") model_config = ConfigDict(populate_by_name=True) @field_validator("username") @classmethod def strip_username(cls, value: str) -> str: return value.strip() @model_validator(mode="after") def passwords_match(self) -> "RegisterRequest": if self.password != self.confirm_password: raise ValueError("两次输入的密码不一致") return self class LoginRequest(BaseModel): username: str = Field(min_length=1, max_length=64) password: str = Field(min_length=1, max_length=128) model_config = ConfigDict(populate_by_name=True) @field_validator("username") @classmethod def strip_username(cls, value: str) -> str: return value.strip() class UserPublic(BaseModel): model_config = ConfigDict(from_attributes=True) id: int username: str class TokenResponse(BaseModel): access_token: str token_type: str = "bearer" user: UserPublic