如何使用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
错误?
答案 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)