Django - как заставить пользователя менять пароль при первом входе в систему, используя поле last_login в django.contrib.auth

Я использую django.contrib.auth. Код ниже - это рабочая функция входа в систему в моем views.py

    #function based
def user_login(request):

    if request.method == "POST":
        username = request.POST['login-username']
        password = request.POST['login-password']
        user = authenticate(request, username = username, password = password)

        if user is not None:
            login(request, user)


            return redirect('dashboard')
            
        else:
            
            return render(request, 'authenticate/login.html', {})

    else:

        return render(request, 'authenticate/login.html', {})

Ниже приведена моя попытка проверить, является ли last_login значением NULL. Если да, то перенаправить пользователя на страницу смены пароля. Он регистрирует вновь созданного пользователя (с NULL в поле last_login), но не перенаправляет на страницу смены пароля. Я пробовал менять расположение оператора if. Как мне правильно это сделать?

def user_login(request):

    if request.method == "POST":
        username = request.POST['login-username']
        password = request.POST['login-password']
        user = authenticate(request, username = username, password = password)

        if user is not None:
            
            if user.last_login == NULL:
                login(request, user)

                return redirect('change-password')

            else:
                login(request, user)
                return redirect('dashboard')
            
        else:
            
            return render(request, 'authenticate/login.html', {})

    else:

        return render(request, 'authenticate/login.html', {})

если вы хотите использовать last_login, вы должны создать новое поле, например created_at и сравнить эти два поля с перенаправлением пользователя

или

Я предлагаю добавить новое поле (boolean field), но значение по умолчанию для него false, когда любой пользователь входит в систему, проверьте, является ли оно False или True, при первом входе перенаправьте пользователя для изменения пароля и обновите это поле на True

удачи

Я нашел решение собственного вопроса:

def user_login(request):

    if request.method == "POST":
        username = request.POST['login-username']
        password = request.POST['login-password']
        user = authenticate(request, username = username, password = password)

        if user is not None and user.last_login is None:
            login(request, user)
            return redirect('change-password')
            
        elif user is not None and user.last_login is not None:
            login(request, user)
            return redirect('dashboard')

        else:
            messages.error(request, ("Login error!"))
            return render(request, 'authenticate/login.html', {})
            

    else:

        return render(request, 'authenticate/login.html', {})
Вернуться на верх