一、作用:无论程序是否正常执行,都可以在接口以统一格式返回数据(信息)。

二、实现思路:自定义异常方法,替换掉默认方法。

三、实现步骤

  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',
}

 

posted on 2020-05-22 10:01  焚音留香  阅读(161)  评论(0编辑  收藏  举报