Вызов пользовательского некорректного запроса 400 в API отдыха с использованием django и django rest framework - PullRequest
0 голосов
/ 12 октября 2018

Я хочу вернуть пользовательскую ошибку при возникновении ошибки HTTP 400.

это моя модель:

class User(models.Model):
      fullname = models.CharField(max_length=100)
      phone = models.CharField(max_length=50, unique=True)
      password = models.CharField(max_length=50, default='SOME STRING')

это мой класс сериализатора:

class UserSerializer(serializers.ModelSerializer):
      class Meta:
           model = User
           fields = ('id', 'fullname', 'phone', 'password')

это мой класс в классе представлений:

 class RegisterUsers(generics.CreateAPIView):
.
.
.
 serializer = UserSerializer(data={
            "fullname": fullname,
            "phone": phone,
            "password": password
        }
    )

          if not serializer.is_valid(raise_exception=True):
              return

, если я пытаюсь зарегистрироваться с одним и тем же номером дважды, возникает ошибка 400 неверных запросов, как на скриншоте ниже:

enter image description here

Я хочу отловить ошибку и проанализировать ее в пользовательском ответе, который выглядит следующим образом:

enter image description here

Может кто-нибудь помочь мне с этим вопросом?заранее спасибо.

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете переопределить метод обработчика пользовательских исключений DRF:

from rest_framework.views import exception_handler
from rest_framework.exceptions import ValidationError


def base_exception_handler(exc, context):
  # Call DRF's default exception handler first,
  # to get the standard error response.
  response = exception_handler(exc, context)

  # check that a ValidationError exception is raised
  if isinstance(exc, ValidationError): 
    # This is where you would prepare the 'custom_error_response'
    # and set the custom response data on response object
    response.data = custom_error_response 

  return response

Чтобы включить собственный обработчик, добавьте параметр EXCEPTION_HANDLER в свой файл настроек:

REST_FRAMEWORK = {
'PAGE_SIZE': 20,
'EXCEPTION_HANDLER': 'path.to.your.module.base_exception_handler',

'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
    'rest_framework.authentication.SessionAuthentication'
)

}

...