185 lines
5.2 KiB
Python
185 lines
5.2 KiB
Python
from django.http import JsonResponse
|
|
from typing import Any, Dict, Optional
|
|
|
|
|
|
class HertzResponse:
|
|
"""
|
|
Hertz统一响应类
|
|
提供标准化的API响应格式
|
|
"""
|
|
|
|
@staticmethod
|
|
def success(data: Any = None, message: str = "操作成功", code: int = 200) -> JsonResponse:
|
|
"""
|
|
成功响应
|
|
|
|
Args:
|
|
data: 响应数据
|
|
message: 响应消息
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
JsonResponse: 标准化的成功响应
|
|
"""
|
|
response_data = {
|
|
'success': True,
|
|
'code': code,
|
|
'message': message,
|
|
'data': data
|
|
}
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False})
|
|
|
|
@staticmethod
|
|
def fail(message: str = "操作失败", data: Any = None, code: int = 400) -> JsonResponse:
|
|
"""
|
|
失败响应(业务逻辑失败)
|
|
|
|
Args:
|
|
message: 失败消息
|
|
data: 响应数据
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
JsonResponse: 标准化的失败响应
|
|
"""
|
|
response_data = {
|
|
'success': False,
|
|
'code': code,
|
|
'message': message,
|
|
'data': data
|
|
}
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False})
|
|
|
|
@staticmethod
|
|
def error(message: str = "系统错误", error: str = None, code: int = 500) -> JsonResponse:
|
|
"""
|
|
错误响应(系统错误)
|
|
|
|
Args:
|
|
message: 错误消息
|
|
error: 详细错误信息
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
JsonResponse: 标准化的错误响应
|
|
"""
|
|
response_data = {
|
|
'success': False,
|
|
'code': code,
|
|
'message': message
|
|
}
|
|
|
|
if error:
|
|
response_data['error'] = error
|
|
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False})
|
|
|
|
@staticmethod
|
|
def unauthorized(message: str = "未授权访问", code: int = 401) -> JsonResponse:
|
|
"""
|
|
未授权响应
|
|
|
|
Args:
|
|
message: 响应消息
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
JsonResponse: 标准化的未授权响应
|
|
"""
|
|
response_data = {
|
|
'success': False,
|
|
'code': code,
|
|
'message': message
|
|
}
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False})
|
|
|
|
@staticmethod
|
|
def forbidden(message: str = "禁止访问", code: int = 403) -> JsonResponse:
|
|
"""
|
|
禁止访问响应
|
|
|
|
Args:
|
|
message: 响应消息
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
JsonResponse: 标准化的禁止访问响应
|
|
"""
|
|
response_data = {
|
|
'success': False,
|
|
'code': code,
|
|
'message': message
|
|
}
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False})
|
|
|
|
@staticmethod
|
|
def not_found(message: str = "资源未找到", code: int = 404) -> JsonResponse:
|
|
"""
|
|
资源未找到响应
|
|
|
|
Args:
|
|
message: 响应消息
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
JsonResponse: 标准化的资源未找到响应
|
|
"""
|
|
response_data = {
|
|
'success': False,
|
|
'code': code,
|
|
'message': message
|
|
}
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False})
|
|
|
|
@staticmethod
|
|
def validation_error(message: str = "参数验证失败", errors: Dict = None, code: int = 422) -> JsonResponse:
|
|
"""
|
|
参数验证错误响应
|
|
|
|
Args:
|
|
message: 响应消息
|
|
errors: 验证错误详情
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
JsonResponse: 标准化的参数验证错误响应
|
|
"""
|
|
response_data = {
|
|
'success': False,
|
|
'code': code,
|
|
'message': message
|
|
}
|
|
|
|
if errors:
|
|
response_data['errors'] = errors
|
|
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False})
|
|
|
|
@staticmethod
|
|
def custom(success: bool, message: str, data: Any = None, code: int = 200, **kwargs) -> JsonResponse:
|
|
"""
|
|
自定义响应
|
|
|
|
Args:
|
|
success: 是否成功
|
|
message: 响应消息
|
|
data: 响应数据
|
|
code: HTTP状态码
|
|
**kwargs: 其他自定义字段
|
|
|
|
Returns:
|
|
JsonResponse: 自定义响应
|
|
"""
|
|
response_data = {
|
|
'success': success,
|
|
'code': code,
|
|
'message': message
|
|
}
|
|
|
|
if data is not None:
|
|
response_data['data'] = data
|
|
|
|
# 添加其他自定义字段
|
|
response_data.update(kwargs)
|
|
|
|
return JsonResponse(response_data, status=code, json_dumps_params={'ensure_ascii': False}) |