Я реализую функциональность, при которой пользователь вынужден сменить пароль (т. Е. Если администратор создает начальный пароль, пользователь должен изменить его при следующем входе в систему). Я использую пакет Django Contrib Auth.
Для этого я расширил профиль пользователя с помощью логического параметра force_password_change
:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
force_password_change = models.BooleanField(default=True)
На мой взгляд, я расширяю стандарт LoginView
:
class MyLoginView(LoginView):
def form_valid(self, form):
# form is valid (= correct password), now check if user requires to set own password
if form.get_user().profile.force_password_change:
return HttpResponseRedirect('password_change')
else:
auth_login(self.request, form.get_user())
return HttpResponseRedirect(self.get_success_url())
Система выдает ошибку 404 страницы не найдена после нажатия кнопки login
: The current path, accounts/login/, didn't match any of these.
Я заметил, что когда я добавляю auth_login(self.request, form.get_user())
непосредственно перед HttpResponseRedirect('password_change')
, он работает нормально. Но это также означает, что пользователь (неправильно) аутентифицирован.
urls.py
:
path('', myapp.MyLoginView.as_view(), name='login'),
path('password_change/', myapp.MyPasswordChangeView.as_view(), name='password_change'),
Почему это так и почему ошибка 404 ссылается на accounts/login/
?