48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
"""统一响应格式"""
|
|
from typing import Any, Generic, Optional, TypeVar, List
|
|
from pydantic import BaseModel, Field
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
class ResponseModel(BaseModel, Generic[T]):
|
|
"""通用响应格式"""
|
|
code: int = 200
|
|
message: str = "success"
|
|
data: Optional[T] = None
|
|
timestamp: int = 0
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class PageResult(BaseModel, Generic[T]):
|
|
"""分页响应格式"""
|
|
items: List[T] = Field(default_factory=list, serialization_alias="list")
|
|
total: int = 0
|
|
page: int = 1
|
|
pageSize: int = 10
|
|
totalPages: int = 0
|
|
|
|
|
|
def success_response(data: Any = None, message: str = "success") -> dict:
|
|
"""成功响应"""
|
|
from datetime import datetime
|
|
return {
|
|
"code": 200,
|
|
"message": message,
|
|
"data": data,
|
|
"timestamp": int(datetime.now().timestamp() * 1000)
|
|
}
|
|
|
|
|
|
def error_response(code: int = 400, message: str = "error", data: Any = None) -> dict:
|
|
"""错误响应"""
|
|
from datetime import datetime
|
|
return {
|
|
"code": code,
|
|
"message": message,
|
|
"data": data,
|
|
"timestamp": int(datetime.now().timestamp() * 1000)
|
|
}
|