РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
577 of 818 menu

Класс PasswordResetConfirmView

Класс PasswordResetConfirmView предназначен для обработки перехода пользователя по ссылке, полученной после запроса на сброс пароля. Данная ссылка содержит токен, позволяющий идентифицировать конкретного пользователя и создать форму для ввода нового пароля. В случае успешной валидации и сохранения нового пароля, пользователь перенаправляется на страницу успешного завершения процедуры. Класс входит в состав модуля django.contrib.auth.views.

Основными параметрами класса являются template_name (шаблон для отображения формы ввода нового пароля), form_class (класс формы для установки нового пароля), success_url (URL для перенаправления после успешной смены пароля), title (заголовок страницы), token_generator (генератор токенов для проверки ссылки) и post_reset_login (автоматический вход после сброса пароля).

Синтаксис

from django.urls import path from django.contrib.auth.views import PasswordResetConfirmView urlpatterns = [ path( 'reset/<uidb64>/<token>/', PasswordResetConfirmView.as_view( template_name='registration/password_reset_confirm.html', success_url='/accounts/login/', post_reset_login=True ), name='password_reset_confirm' ), ]

Настройка URL

Для работы представления необходимо передать в URL два параметра: uidb64 (закодированный идентификатор пользователя) и token (уникальный токен для проверки подлинности ссылки). Эти параметры генерируются представлением PasswordResetView при отправке письма:

from django.urls import path from django.contrib.auth.views import PasswordResetConfirmView urlpatterns = [ path( 'reset/<uidb64>/<token>/', PasswordResetConfirmView.as_view( template_name='registration/password_reset_confirm.html' ), name='password_reset_confirm' ), ]

Создание шаблона

Шаблон для ввода нового пароля должен содержать форму с полями new_password1 и new_password2, а также скрытое поле csrf_token для защиты от межсайтовой подделки запроса. Пример шаблона password_reset_confirm.html:

{% extends "base.html" %} {% block content %} <h2>Введите новый пароль</h2> {% if validlink %} <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Сменить пароль</button> </form> {% else %} <p>Ссылка для сброса пароля недействительна.</p> {% endif %} {% endblock %}

Переменная validlink указывает на то, действительна ли ссылка для сброса пароля. Если она равна False, следует показать сообщение об ошибке.

Настройка автоматического входа

Класс позволяет автоматически выполнить вход пользователя после успешной смены пароля с помощью параметра post_reset_login. Дополнительно можно указать бекенд аутентификации через параметр post_reset_login_backend:

from django.urls import path from django.contrib.auth.views import PasswordResetConfirmView urlpatterns = [ path( 'reset/<uidb64>/<token>/', PasswordResetConfirmView.as_view( post_reset_login=True, post_reset_login_backend='django.contrib.auth.backends.ModelBackend' ), name='password_reset_confirm' ), ]

Полный пример использования

Рассмотрим полный пример настройки представления со всеми параметрами:

from django.urls import path from django.contrib.auth.views import PasswordResetConfirmView from django.contrib.auth.forms import SetPasswordForm urlpatterns = [ path( 'reset/<uidb64>/<token>/', PasswordResetConfirmView.as_view( template_name='registration/password_reset_confirm.html', form_class=SetPasswordForm, success_url='/accounts/login/', title='Введите новый пароль', post_reset_login=True, post_reset_login_backend='django.contrib.auth.backends.ModelBackend' ), name='password_reset_confirm' ), ]

Пример . Обработка в шаблоне

Пример обработки формы с выводом ошибок валидации в шаблоне:

{% extends "base.html" %} {% block content %} <h2>{{ title }}</h2> {% if validlink %} <form method="post"> {% csrf_token %} <div> {{ form.new_password1.errors }} <label for="id_new_password1">Новый пароль:</label> {{ form.new_password1 }} </div> <div> {{ form.new_password2.errors }} <label for="id_new_password2">Подтверждение пароля:</label> {{ form.new_password2 }} </div> <button type="submit">Сменить пароль</button> </form> {% else %} <p>Ссылка для сброса пароля недействительна или устарела.</p> {% endif %} {% endblock %}

Результат отображения страницы при успешном переходе по ссылке:

"Форма для ввода нового пароля отображается"

Результат при переходе по недействительной ссылке:

"Ссылка для сброса пароля недействительна или устарела."

Смотрите также

  • класс PasswordResetView,
    который инициирует процесс сброса пароля
  • класс PasswordResetDoneView,
    который отображается после отправки письма со ссылкой
  • класс PasswordResetCompleteView,
    который отображается после успешного сброса пароля
  • класс PasswordChangeView,
    который позволяет сменить пароль авторизованному пользователю
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить