Во view функции, нужно вместо except IntegrityError и написать проверки

 @api_view(['POST'])
 def signup_user(request):
     """
     Функция создания кода подтверждения,
     отправляет код на email.
     """
     serializer = RegistrationSerializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     try:
         user, _ = User.objects.get_or_create(**serializer.validated_data)
     except IntegrityError:
       raise ValidationError(
             'Пользователи с таким username или email уже существуют',
             status.HTTP_400_BAD_REQUEST,
         )
     confirmation_code = default_token_generator.make_token(user)
     send_mail(
         subject='Регистрация на YaMDb.',
         message=f'Ваш код подтверждения: {confirmation_code}',
         from_email=settings.DEFAULT_EMAIL,
         recipient_list=[user.email]
     )
     return Response(serializer.data, status=status.HTTP_200_OK)

Нужно избавиться от except IntegrityError, написав проверку со следующими условиями: Запрос к эндпоинту на получение кода подтверждения валиден при выполнении одного из следующих условий:

  1. Полученные username и email не принадлежат существующим пользователям;
  2. username и email присутствуют в БД и принадлежат одному пользователю.

Ответы (0 шт):