覆盖DRF自定义异常响应

时间:2017-11-07 06:00:36

标签: django django-rest-framework

如果发生错误,我希望在将响应发送回客户端时发送error_codes !!

所以,我有一个表格,其中需要参数ab。如果任何参数未被POST,则DRF序列化程序发回一个响应,说This field is required.我想将错误代码添加到响应中以供客户端识别。不同的错误不同的错误代码。

所以,我编写了自己的自定义异常处理程序。它是这样的。

response = exception_handler(exc, context)
if response is not None:
    error = {
        'error_code': error_code,  # Need to identify the error code, based on the type of fail response.
        'errors': response.data
        }
    return Response(error, status=http_code)
return response

我面临的问题是我需要识别收到的异常类型,以便我可以相应地发送error_code。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

REST框架的视图处理各种异常,并处理返回适当的错误响应。

处理的例外情况是:

  • 在REST框架内引发了APIException。
  • Django的Http404
  • Django的PermissionDenied异常。

您可以识别状态

收到的例外类型
from rest_framework import exceptions, status
response = exception_handler(exc, context)

if response is not None:
   if response.status == status.HTTP_404_NOT_FOUND:
      # Django's Http404
   elif response.status == status.HTTP_403_FORBIDDEN:
      # PermissionDenied exception
   else:
      # APIException raised 

此外,大多数错误响应都会在响应正文中包含一个键详细信息

您可以检查并设置自定义错误代码。

response = exception_handler(exc, context)

if response is not None:
    # identify the type of exception received, detail can be text, list or dictionary of items.
    if response.data.detail == 'some text':
       error_code = 111
    elif more_conditions:
       ...
  

参考:http://www.django-rest-framework.org/api-guide/exceptions/