Django Rest Framework Возвращает 403 в сериализаторе - PullRequest
0 голосов
/ 29 августа 2018

Как я могу вернуть другой код ошибки с помощью сериализаторов django rest framework?

В моем файле 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 ]

0 голосов
/ 29 августа 2018

@ 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:
    <b>raise CustomAPIException({"some": "data"})</b>



Одним из преимуществ этого конкретного класса является то, что вы можете вызвать исключение API с помощью пользовательских кодов состояния, указав параметр status_code
Ex.

if some_condition:
    raise CustomAPIException({"some": "data"},<b>status_code=status.HTTP_409_CONFLICT</b>)
0 голосов
/ 29 августа 2018

Вы можете переопределить метод 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 данных

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...