lty/qy_lty/common/responses.py
2026-03-17 13:17:02 +08:00

122 lines
3.1 KiB
Python

from rest_framework.response import Response
from rest_framework import status
def api_response(success=True, data=None, message=None, code=None, status_code=status.HTTP_200_OK, **kwargs):
"""
Standard API response format for the entire application
Args:
success (bool): Whether the request was successful
data (any): The data to return, can be None, a dict, a list, etc.
message (str): A message explaining the result
code (int): A custom code for the response (different from HTTP status code)
status_code (int): The HTTP status code to return
**kwargs: Any additional fields to include in the response
Returns:
Response: A DRF Response object with standardized structure
"""
if code is None:
code = status_code
response_data = {
'success': success,
'code': code,
}
if data is not None:
response_data['data'] = data
if message is not None:
response_data['message'] = message
# Add any additional fields
for key, value in kwargs.items():
response_data[key] = value
return Response(response_data, status=status_code)
def success_response(data=None, message="操作成功", code=200, **kwargs):
"""
Standard success response
"""
return api_response(
success=True,
data=data,
message=message,
code=code,
status_code=status.HTTP_200_OK,
**kwargs
)
def created_response(data=None, message="创建成功", code=201, **kwargs):
"""
Standard response for resource creation
"""
return api_response(
success=True,
data=data,
message=message,
code=code,
status_code=status.HTTP_201_CREATED,
**kwargs
)
def error_response(message="操作失败", code=400, status_code=status.HTTP_400_BAD_REQUEST, **kwargs):
"""
Standard error response
"""
return api_response(
success=False,
data=None,
message=message,
code=code,
status_code=status_code,
**kwargs
)
def not_found_response(message="资源不存在", code=404, **kwargs):
"""
Standard not found response
"""
return api_response(
success=False,
data=None,
message=message,
code=code,
status_code=status.HTTP_404_NOT_FOUND,
**kwargs
)
def unauthorized_response(message="未授权访问", code=401, **kwargs):
"""
Standard unauthorized response
"""
return api_response(
success=False,
data=None,
message=message,
code=code,
status_code=status.HTTP_401_UNAUTHORIZED,
**kwargs
)
def forbidden_response(message="禁止访问", code=403, **kwargs):
"""
Standard forbidden response
"""
return api_response(
success=False,
data=None,
message=message,
code=code,
status_code=status.HTTP_403_FORBIDDEN,
**kwargs
)