zoukankan      html  css  js  c++  java
  • drf之异常处理

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

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

    三、实现步骤

      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',
    }
  • 相关阅读:
    yum安装LAMP
    CentOS7添加永久静态路由
    批量解压缩,显示进度条(2)
    Django静态文件配置
    大家同乐一下,搞了三天的字符串与STL!终于搞好了。。
    C++动态分配空间
    UNICODE问题
    VC编码规范 (转)
    vs2008中添加splash screen[分享]
    E
  • 原文地址:https://www.cnblogs.com/caoyu080202201/p/13279885.html
Copyright © 2011-2022 走看看