栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

drf的异常处理处理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

drf的异常处理处理

今天来总结下如何处理drf的异常处理
1:定义一个路由测试

path('error/',views.errorAPIView.as_view({'get':'list'}))

注意不要写错了,否则会报错set

2:在根目录下建立一个exceptions.py文件,定义如下配置

from rest_framework.views import exception_handler as drf_exception_handler

from django.db import DatabaseError

from rest_framework.response import Response

from rest_framework import status


def custom_exception_handler(exc, context):
    """
    自定义异常处理函数
    :param exc: 异常对象,本次发生的异常对象
    :param context: 字典,异常出现时的执行上下文环境
    :return:
    """
    # 先让drf进行异常判断
    response = drf_exception_handler(exc, context)

    # 判断response对象是否为None
    if response is None:
        """出现drf不能处理的异常"""
        if isinstance(exc, DatabaseError):
            view = context.get("view")
            print('数据库报错,[%s]: %s' % (view, exc))
            return Response({"detail": "服务器内部错误!"}, status=status.HTTP_507_INSUFFICIENT_STORAGE)

        if isinstance(exc, ZeroDivisionError):
            view = context.get("view")
            print("0不能作为除数! [%s]: %s" % (view, exc))
            return Response({"detail": "服务器内部错误!"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

    return response


### REST framework定义的异常
'''
APIException使用drf中所有异常的父类,他的子类有以下:

- ParseError 解析错误
- AuthenticationFailed 认证失败
- NotAuthenticated 尚未认证
- PermissionDenied 权限受限
- NotFound 未找到
- MethodNotAllowed 请求方式不支持
- NotAcceptable 要获取的数据格式不支持
- Throttled 超过限流次数
- ValidationError 校验失败

也就是说,很多的没有在上面列出来的异常,就需要我们在自定义异常中自己处理了。

'''

启动的时候,报这个错误


所以我们按照提示修改源码如下

3:加个视图

#测试数学计算异常
class errorAPIView(ViewSet):


    @action(methods=['get'],detail=False,url_path='error')
    def  list(self,request):
        10 / 0
        return  Response('测试异常。。。。')

4:成功启动了,加上这个配置,否则会报这个错误,看不懂

    # 异常处理
    'EXCEPTION_HANDLER': 'exceptions.custom_exception_handler',

5:再次启动

OK,大功告成~~~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号