工作中有需要统一 drf 的json返回 正常响应 和 异常响应的格式
如正常响应统一为
{
'code': 200,
'msg': msg,
'data': data
}
异常响应统一为
{
'code': 0,
'msg': msg
}
解决方案
自定义异常处理类
from rest_framework.response import Response
from rest_framework.views import exception_handler
from rest_framework import status
def custom_exception_handler(exc, context):
res = exception_handler(exc, context)
if res:
# 说明是drf的异常,它处理了
if isinstance(res.data, dict):
detail = res.data.pop('detail', 'error')
else:
detail = res.data[0]
return Response({'code': 0, 'msg': detail}, status=res.status_code)
# 说明是其它异常,它没有处理
return Response({
'code': 0,
'msg': str(exc)
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)