From e9be684b2e6e6f7c94276999d491a61c25547c72 Mon Sep 17 00:00:00 2001 From: carry <2641257231@qq.com> Date: Mon, 20 Jan 2025 22:15:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=95=B0=E6=8D=AE=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- schemas/auth.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ schemas/user.py | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 schemas/auth.py create mode 100644 schemas/user.py diff --git a/schemas/auth.py b/schemas/auth.py new file mode 100644 index 0000000..14ecef6 --- /dev/null +++ b/schemas/auth.py @@ -0,0 +1,52 @@ +from pydantic import BaseModel +from datetime import datetime + +class Token(BaseModel): + """ + 表示一个JWT令牌的模型类。 + + Attributes: + access_token (str): 访问令牌,用于身份验证和授权。 + refresh_token (str): 刷新令牌,用于获取新的访问令牌。 + token_type (str): 令牌类型,通常是"Bearer"。 + expires_in (int): 访问令牌的有效期,以秒为单位。 + """ + access_token: str + refresh_token: str + token_type: str + expires_in: int + +class TokenData(BaseModel): + """ + 表示JWT令牌中存储的数据的模型类。 + + Attributes: + id (int): 用户的唯一标识符。 + username (str): 用户的用户名。 + role (str): 用户的角色或权限。 + exp (datetime): 令牌的过期时间。 + """ + id: int + username: str + role: str + exp: datetime + +class LoginRequest(BaseModel): + """ + 表示用户登录请求的模型类。 + + Attributes: + username (str): 用户登录时输入的用户名。 + password (str): 用户登录时输入的密码。 + """ + username: str + password: str + +class RefreshTokenRequest(BaseModel): + """ + 表示刷新令牌请求的模型类。 + + Attributes: + refresh_token (str): 用于刷新访问令牌的刷新令牌。 + """ + refresh_token: str \ No newline at end of file diff --git a/schemas/user.py b/schemas/user.py new file mode 100644 index 0000000..46dc5f3 --- /dev/null +++ b/schemas/user.py @@ -0,0 +1,43 @@ +from datetime import datetime +from enum import Enum +from pydantic import BaseModel, Field, root_validator +from typing import Optional + +# 用户角色枚举 +class UserRole(str, Enum): + SYSTEM_ADMIN = "system_admin" + ADMIN = "admin" + USER = "user" + +# 基础用户模型 +class UserBase(BaseModel): + username: str = Field(..., max_length=50, description="用户名") + role: UserRole = Field(default=UserRole.USER, description="用户角色") + description: Optional[str] = Field(None, max_length=255, description="用户描述") + +# 用户创建模型 +class UserCreate(UserBase): + password: str = Field(..., min_length=6, max_length=255, description="用户密码") + + +# 用户更新模型 +class UserUpdate(BaseModel): + username: Optional[str] = Field(None, max_length=50, description="用户名") + role: Optional[UserRole] = Field(None, description="用户角色") + description: Optional[str] = Field(None, max_length=255, description="用户描述") + + # 可选:确保至少更新一个字段 + @root_validator + def validate_at_least_one_field(cls, values): + if not any(values.values()): + raise ValueError("至少需要更新一个字段") + return values + +# 用户响应模型 +class UserResponse(UserBase): + id: int = Field(..., description="用户ID") + created_at: datetime = Field(..., description="创建时间") + updated_at: datetime = Field(..., description="更新时间") + + class Config: + orm_mode = True # 允许从 ORM 对象加载数据 \ No newline at end of file