46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
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
|