Django Rest Framework在序列化器中返回403

时间:2018-08-29 09:19:43

标签: python django django-rest-framework

如何使用django rest框架的序列化器返回不同的错误代码?

我在serializer.py文件中:

    def create(self, validated_data):
        if 'Message' not in validated_data:
            # If message is blank, don't create the message
            return PermissionDenied()

但是当我这样做时,它只返回带有正文201的{​​{1}}而不是返回{"deleted":null}错误。

如何使它返回403错误?

2 个答案:

答案 0 :(得分:3)

您可以按以下方式覆盖validate_message方法:

from rest_framework.exceptions import ValidationError

def validate_message(self, message):
    if not message:
        raise ValidationError('error message here')
    return message

请注意,ValidationError将返回400 Bad Request状态代码,该状态代码更适合POST数据中缺少必填字段的情况

答案 1 :(得分:0)

@Marcell Erasmus's的答案很好,但是状态代码部分(如何返回HTTP 403 status code)未涵盖该问题。

首先,您需要添加一个 自定义异常类 ,如下所示,

from rest_framework import exceptions
from rest_framework import status


class CustomAPIException(exceptions.APIException):
    status_code = status.HTTP_403_FORBIDDEN
    default_code = 'error'

    def __init__(self, detail, status_code=None):
        self.detail = detail
        if status_code is not None:
            self.status_code = status_code

并根据需要在任何地方使用类,

if some_condition:
    raise CustomAPIException({"some": "data"})



该特定类的最大优点之一是,您可以通过指定 status_code 参数
来使用自定义状态代码引发API异常 例如。

if some_condition:
    raise CustomAPIException({"some": "data"},status_code=status.HTTP_409_CONFLICT)