异常处理

一、内置异常

我们在访问DRF生成的API时,会经常看到一些错误提示,比如权限验证失败,请求方法不允许等,其实这种是属于异常。DRF提供了以下内置的异常:

如果请求过程中出现以上异常,DRF会进行处理,并返回detail信息。

二、自定义异常

如果遇到其他异常,DRF将无法处理,这时候就会导致程序抛出错误。为了处理其他错误,我们可以自定义异常处理函数。示例代码如下:

# exceptions.py
from rest_framework.views import exception_handler
from rest_framework.response import Response
from rest_framework import status

def merchant_exception_handler(exc, context):
    # 先调用DRF异常处理方法,获取响应对象
    response = exception_handler(exc, context)

    # 如果response是None,则出现了DRF无法处理的异常
    if response is None:
        response = Response({'detail': '出现了异常'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

    return response

然后在配置文件中,配置好默认的自定义异常处理:

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'myapp.exceptions.merchant_exception_handler'
}

如果没有指定自定义异常处理函数,默认的处理函数为:rest_framework.views.exception_handler。