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', {})