Во 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, написав проверку со следующими условиями: Запрос к эндпоинту на получение кода подтверждения валиден при выполнении одного из следующих условий:
- Полученные username и email не принадлежат существующим пользователям;
- username и email присутствуют в БД и принадлежат одному пользователю.