Как использовать `@transaction` для отката зарегистрированного пользователя в случае, если Email не удалось сгенерировать?
Я создаю простой django-rest-framework
бэкенд, который использует dj-rest-auth
систему аутентификации со следующими настройками
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
Я хочу убедиться, что в случае сбоя в генерации электронной почты зарегистрированный пользователь откатывается назад.
Это моя serializer.py
class CustomRegisterSerializer(RegisterSerializer):
first_name = serializers.CharField(max_length=30)
last_name = serializers.CharField(max_length=30)
@transaction.atomic
def save(self, request):
try:
user = super().save(request)
user.first_name = self.data.get('first_name')
user.last_name = self.data.get('last_name')
user.save()
return user
except <...What exception has to be caught?...>:
transaction.set_rollback(True)
return
Какое исключение я должен поймать и правильно ли я это делаю? Как мне этого добиться?
Для справки, вот ошибка, возникающая в случае неправильных значений в settings.py
файле
Exception Type: ConnectionRefusedError at /api/auth/register/
Exception Value: [WinError 10061] No connection could be made because the target machine actively refused it
Также возможен ли откат в случае, если пользователь указал неправильный email и письмо не было доставлено?
@transaction.atomic
выполнит транзакцию с базой данных, если ваше представление выдаст ответ без ошибок. Поскольку вы сами ловите исключение, Django кажется, что ваше представление выполнилось просто отлично.
Если вы поймали исключение, вам нужно обработать его самостоятельно. Вызовите исключение или верните ошибку.
Что касается второго вопроса, вы можете проверить электронную почту перед отправкой, также любая ошибка, связанная с отправкой электронной почты, вызовет ошибку.