'''自定义返回处理'''# 自定义异常处理from rest_framework.views import exception_handlerfrom rest_framework.views import Responsefrom rest_framework import status# 导入控制返回的JSON格式的类from rest_framework.renderers import JSONRendererclass customrenderer(JSONRenderer):# 重构render方法def render(self, data, accepted_media_type=None, renderer_context=None):print("renderer_context",renderer_context)if renderer_context:#print(renderer_context)#print(renderer_context["response"].status_code)# 响应的信息,成功和错误的都是这个#成功和异常响应的信息,异常信息在前面自定义异常处理中已经处理为{'message': 'error'}这种格式print("data",data)# 如果返回的data为字典if isinstance(data, dict):#响应信息中有message和code这两个key,则获取响应信息中的message和code,并且将原本data中的这两个key删除,放在自定义响应信息里#响应信息中没有则将msg内容改为请求成功 code改为请求的状态码msg = data.pop('message', '请求成功')code = data.pop('code', renderer_context["response"].status_code)#如果不是字典则将msg内容改为请求成功 code改为请求的状态码else:msg = '请求成功'code = renderer_context["response"].status_code#自定义返回的格式ret = {"header":{'code': code,'msg': msg,},"body": data,}# 返回JSON数据return super().render(ret, accepted_media_type, renderer_context)else:return super().render(data, accepted_media_type, renderer_context)def custom_exception_handler(exc, context):# 先调用REST framework默认的异常处理方法获得标准错误响应对象response = exception_handler(exc, context)#print(exc) #错误原因 还可以做更详细的原因,通过判断exc信息类型#print(context) # 错误信息# print('1234 = %s - %s - %s' % (context['view'], context['request'].method, exc))#print(response)#如果response响应对象为空,则设置message这个key的值,并将状态码设为500#如果response响应对象不为空,则则设置message这个key的值,并将使用其本身的状态码if response is None:return Response({"header":{"code":"500",'msg': '{exc}'.format(exc=exc),},"body":None}, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True)else:# print('123 = %s - %s - %s' % (context['view'], context['request'].method, exc))return Response({"header":{"code":"500",'msg': '{exc}'.format(exc=exc),},"body":None}, status=response.status_code, exception=True)return response
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。