异常处理 Exceptions

异常处理 Exceptions

REST framework提供了异常处理,我们可以自定义异常处理函数。

from rest_framework.views import exception_handler

def custom_exception_handler(exc, context):
    # 先调用REST framework默认的异常处理方法获得标准错误响应对象
    response = exception_handler(exc, context)

    # 在此处补充自定义的异常处理
    if response is not None:
        response.data[status_code] = response.status_code

    return response

在配置文件中声明自定义的异常处理

REST_FRAMEWORK = {
    #配置异常句柄
    EXCEPTION_HANDLER: my_project.my_app.utils.custom_exception_handler
}

如果未声明,会采用默认的方式,如下

REST_FRAMEWORK = {
    EXCEPTION_HANDLER: rest_framework.views.exception_handler
}

例如:

补充上处理关于数据库的异常

from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework import status
from django.db import DatabaseError

def exception_handler(exc, context):
    response = drf_exception_handler(exc, context)

    if response is None:
        view = context[view]
        if isinstance(exc, DatabaseError):
            print([%s]: %s % (view, exc))
            response = Response({detail: 服务器内部错误}, status=status.HTTP_507_INSUFFICIENT_STORAGE)

    return response

 

REST framework定义的异常

  • APIException 所有异常的父类

  • ParseError 解析错误

  • AuthenticationFailed 认证失败

  • NotAuthenticated 尚未认证

  • PermissionDenied 权限决绝

  • NotFound 未找到

  • MethodNotAllowed 请求方式不支持

  • NotAcceptable 要获取的数据格式不支持

  • Throttled 超过限流次数

  • ValidationError 校验失败

相关文章
相关标签/搜索