aidress/app/utils/response.py
2025-03-21 22:49:03 +08:00

136 lines
3.6 KiB
Python

from typing import Any, Dict, List, Optional, Union
from fastapi import status
from fastapi.responses import JSONResponse
class APIResponse:
"""API标准响应格式工具类"""
@staticmethod
def success(
data: Any = None,
message: str = "操作成功",
code: int = 200
) -> Dict[str, Any]:
"""
成功响应
Args:
data: 响应数据
message: 响应消息
code: 状态码
Returns:
标准响应格式的字典
"""
return {
"success": True,
"code": code,
"message": message,
"data": data
}
@staticmethod
def error(
message: str = "操作失败",
code: int = 400,
data: Any = None
) -> Dict[str, Any]:
"""
错误响应
Args:
message: 错误消息
code: 错误状态码
data: 附加错误数据
Returns:
标准响应格式的字典
"""
return {
"success": False,
"code": code,
"message": message,
"data": data
}
@staticmethod
def json_response(
data: Any = None,
message: str = "操作成功",
code: int = 200,
success: bool = True,
status_code: int = status.HTTP_200_OK,
headers: Dict[str, str] = None
) -> JSONResponse:
"""
返回JSONResponse对象
Args:
data: 响应数据
message: 响应消息
code: 业务状态码
success: 是否成功
status_code: HTTP状态码
headers: 自定义响应头
Returns:
JSONResponse对象
"""
content = {
"success": success,
"code": code,
"message": message,
"data": data
}
return JSONResponse(
content=content,
status_code=status_code,
headers=headers
)
# 常用响应码封装
@classmethod
def ok(cls, data: Any = None, message: str = "操作成功") -> Dict[str, Any]:
"""200 成功"""
return cls.success(data, message, 200)
@classmethod
def created(cls, data: Any = None, message: str = "创建成功") -> Dict[str, Any]:
"""201 创建成功"""
return cls.success(data, message, 201)
@classmethod
def accepted(cls, data: Any = None, message: str = "请求已接受") -> Dict[str, Any]:
"""202 已接受"""
return cls.success(data, message, 202)
@classmethod
def no_content(cls) -> Dict[str, Any]:
"""204 无内容"""
return cls.success(None, "无内容", 204)
@classmethod
def bad_request(cls, message: str = "请求参数错误") -> Dict[str, Any]:
"""400 请求错误"""
return cls.error(message, 400)
@classmethod
def unauthorized(cls, message: str = "未授权") -> Dict[str, Any]:
"""401 未授权"""
return cls.error(message, 401)
@classmethod
def forbidden(cls, message: str = "禁止访问") -> Dict[str, Any]:
"""403 禁止"""
return cls.error(message, 403)
@classmethod
def not_found(cls, message: str = "资源不存在") -> Dict[str, Any]:
"""404 不存在"""
return cls.error(message, 404)
@classmethod
def server_error(cls, message: str = "服务器内部错误") -> Dict[str, Any]:
"""500 服务器错误"""
return cls.error(message, 500)