Django проверяет user.is_authenticated перед UserCreationForm, чтобы пользователь не зарегистрировался дважды

В Django я пытаюсь предотвратить повторную регистрацию (sign up) уже существующего пользователя. В моем случае пользователь может зарегистрироваться с помощью формы. Мой подход заключается в проверке views.py, если пользователь уже существует, путем предварительной проверки is_authenticated. Если пользователь не существует, то записи формы будут обработаны, и пользователь будет создан.

Проблема: если пользователь уже существует, я ожидаю, что условие request.user.is_authenticated будет True и браузер будет перенаправлен на home. Вместо этого оценка продолжает обрабатывать форму, выбрасывая (конечно же) следующую ошибку:

Значение исключения: дублирующее значение ключа нарушает уникальное ограничение "auth_user_username_key" ПОДРОБНАЯ ИНФОРМАЦИЯ: Ключ (имя пользователя)=(john.doe) уже существует.

Это образец моего views.py:

def register_user(request):
    if request.method == "POST":
        if request.user.is_authenticated:
            messages.error(request, ('User already exists.'))
            return redirect('home')
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            ... # do more stuff

Что я упускаю?

Вы пробовали request.user.is_anonymous?

Если пользователь уже вошел в систему, то is_authenticated будет выдавать True, а False - если пользователь не вошел в систему.

Я предполагаю, что вы пытаетесь зарегистрироваться/зарегистрироваться без активной сессии, тогда первое внутреннее if request.user.is_authenticated оценивается как False и не используется, поэтому оно переходит ко второму внутреннему if и затем возникает ошибка базы данных, потому что вы пытались использовать то же самое имя пользователя.

Вернуться на верх