一、作用:无论程序是否正常执行,都可以在接口以统一格式返回数据(信息)。
二、实现思路:自定义异常方法,替换掉默认方法。
三、实现步骤
1、写一个自定义异常处理方法。
2、具体代码:
from rest_framework.views import exception_handler # 默认异常处理方法 from rest_framework.response import Response from rest_framework import status # exc:异常对象,context:异常信息,可写入日志 def new_exception_handler(exc, context): response=exception_handler(exc, context) # 先执行照默认方法 # 默认方法遇到异常有两种情况 # 列举的部分做了处理,将异常信息与异常状态码放入了response对象中返回 # 剩余未处理的统一返回None,再由django处理,但是处理得非常粗糙 if not response: # 没有返回对象,说明遇到了未列举的异常 # 具体异常之一 if isinstance(exc, ZeroDivisionError): return Response(data={'status': 1001, 'msg': "ZeroDivisionError相关的错误:{}".format(str(exc))}, status=status.HTTP_400_BAD_REQUEST) # 其他异常 return Response(data={'status':2001,'msg':"其他异常:{}".format(str(exc))},status=status.HTTP_400_BAD_REQUEST) else: # 重新组织默认方法处理的结果 return Response(data={'status':3001,'msg':response.data.get('detail')},status=status.HTTP_400_BAD_REQUEST)
3、在setting.py中配置方可生效:
REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'app01.limiter.new_exception_handler', }