63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
"""
|
|
统一响应格式
|
|
"""
|
|
from typing import Optional, Any, Dict, Generic, TypeVar
|
|
from pydantic import BaseModel, Field
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
class APIResponse(BaseModel, Generic[T]):
|
|
"""统一 API 响应格式"""
|
|
|
|
success: bool = Field(default=True, description="请求是否成功")
|
|
code: int = Field(default=200, description="HTTP 状态码")
|
|
message: str = Field(default="操作成功", description="响应消息")
|
|
data: Optional[T] = Field(default=None, description="响应数据")
|
|
error: Optional[Dict[str, Any]] = Field(default=None, description="错误信息")
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"success": True,
|
|
"code": 200,
|
|
"message": "操作成功",
|
|
"data": {},
|
|
}
|
|
}
|
|
|
|
|
|
def success_response(
|
|
data: Any = None,
|
|
message: str = "操作成功",
|
|
code: int = 200,
|
|
) -> APIResponse:
|
|
"""成功响应"""
|
|
return APIResponse(
|
|
success=True,
|
|
code=code,
|
|
message=message,
|
|
data=data,
|
|
)
|
|
|
|
|
|
def error_response(
|
|
message: str = "操作失败",
|
|
code: int = 500,
|
|
error_code: Optional[str] = None,
|
|
error_detail: Optional[Any] = None,
|
|
) -> APIResponse:
|
|
"""错误响应"""
|
|
error = {}
|
|
if error_code:
|
|
error["error_code"] = error_code
|
|
if error_detail:
|
|
error["error_detail"] = error_detail
|
|
|
|
return APIResponse(
|
|
success=False,
|
|
code=code,
|
|
message=message,
|
|
error=error if error else None,
|
|
)
|