初始版本

This commit is contained in:
z66
2025-12-26 13:42:22 +08:00
parent ddb90d6c20
commit b495bc1dca
43 changed files with 2179 additions and 20 deletions
+5
View File
@@ -0,0 +1,5 @@
"""
Pydantic 模式定义
用于 API 请求和响应的数据验证
"""
+42
View File
@@ -0,0 +1,42 @@
"""
博客文章相关的 Pydantic 模式
"""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
class PostBase(BaseModel):
"""博客文章基础模式"""
title: str
slug: str
content: str
class PostCreate(PostBase):
"""创建博客文章请求模式"""
pass
class PostUpdate(BaseModel):
"""更新博客文章请求模式"""
title: Optional[str] = None
slug: Optional[str] = None
content: Optional[str] = None
class PostInDB(PostBase):
"""数据库中的博客文章模式"""
id: int
created_at: datetime
updated_at: Optional[datetime] = None
user_id: int
class Config:
from_attributes = True
class Post(PostInDB):
"""博客文章响应模式"""
pass
+39
View File
@@ -0,0 +1,39 @@
"""
待办事项相关的 Pydantic 模式
"""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
class TodoBase(BaseModel):
"""待办事项基础模式"""
title: str
class TodoCreate(TodoBase):
"""创建待办事项请求模式"""
pass
class TodoUpdate(BaseModel):
"""更新待办事项请求模式"""
title: Optional[str] = None
done: Optional[bool] = None
class TodoInDB(TodoBase):
"""数据库中的待办事项模式"""
id: int
done: bool
created_at: datetime
user_id: int
class Config:
from_attributes = True
class Todo(TodoInDB):
"""待办事项响应模式"""
pass
+50
View File
@@ -0,0 +1,50 @@
"""
用户相关的 Pydantic 模式
"""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, EmailStr
class UserBase(BaseModel):
"""用户基础模式"""
username: str
email: Optional[EmailStr] = None
class UserCreate(UserBase):
"""创建用户请求模式"""
password: str
class UserUpdate(BaseModel):
"""更新用户请求模式"""
username: Optional[str] = None
email: Optional[EmailStr] = None
password: Optional[str] = None
class UserInDB(UserBase):
"""数据库中的用户模式"""
id: int
created_at: datetime
class Config:
from_attributes = True
class User(UserInDB):
"""用户响应模式(不包含敏感信息)"""
pass
class Token(BaseModel):
"""JWT 令牌响应模式"""
access_token: str
token_type: str = "bearer"
class TokenData(BaseModel):
"""令牌数据模式"""
username: Optional[str] = None