为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牧羊人nacy 2021-06-04 14:54:16
如何使用 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正文{"deleted":null}而不是返回403错误。我怎样才能让它返回403错误?
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

您可以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数据中缺少必填字段时更好


查看完整回答
反对 回复 2021-06-06
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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


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参数Ex来引发带有自定义状态代码的 API 异常


if some_condition:

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


查看完整回答
反对 回复 2021-06-06
  • 2 回答
  • 0 关注
  • 282 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信