Класс PasswordResetView
Класс PasswordResetView применяется для создания
страницы восстановления пароля. Он наследуется от
встроенного представления Django и автоматически
обрабатывает отправку письма со ссылкой для сброса
пароля. В качестве аргументов можно указать
шаблон формы, email-тему, и другие настройки.
По умолчанию представление использует шаблон
'registration/password_reset_form.html'.
Синтаксис
from django.contrib.auth.views import PasswordResetView
PasswordResetView.as_view(
template_name='registration/password_reset_form.html',
email_template_name='registration/password_reset_email.html',
subject_template_name='registration/password_reset_subject.txt',
success_url='/login/',
from_email='admin@example.com',
html_email_template_name=None,
extra_email_context=None
)
Пример . Использование в urls.py
Давайте создадим URL-маршрут для восстановления пароля
с использованием PasswordResetView:
from django.urls import path
from django.contrib.auth.views import PasswordResetView
from django.contrib.auth.views import PasswordResetDoneView
from django.contrib.auth.views import PasswordResetConfirmView
from django.contrib.auth.views import PasswordResetCompleteView
urlpatterns = [
path('password-reset/',
PasswordResetView.as_view(
template_name='registration/password_reset_form.html',
email_template_name='registration/password_reset_email.html',
subject_template_name='registration/password_reset_subject.txt',
success_url='/password-reset/done/'
),
name='password_reset'
),
path('password-reset/done/',
PasswordResetDoneView.as_view(),
name='password_reset_done'
),
path('reset/<uidb64>/<token>/',
PasswordResetConfirmView.as_view(),
name='password_reset_confirm'
),
path('reset/done/',
PasswordResetCompleteView.as_view(),
name='password_reset_complete'
),
]
Пример . Кастомный шаблон
Создадим собственный шаблон для формы восстановления
пароля в файле 'registration/password_reset_form.html':
{% extends "base.html" %}
{% block content %}
<h2>Восстановление пароля</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Отправить</button>
</form>
{% endblock %}
Пример . Шаблон письма
Создадим шаблон для email-письма со ссылкой на сброс
пароля в файле 'registration/password_reset_email.html':
{% autoescape off %}
Здравствуйте,
Вы получили это письмо, потому что запросили
восстановление пароля для аккаунта на сайте.
Пожалуйста, перейдите по ссылке ниже и
установите новый пароль:
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
Ваше имя пользователя: {{ user.get_username }}
Спасибо за использование нашего сайта!
{% endautoescape %}
Пример . Кастомизация представления
Давайте создадим собственное представление,
наследуясь от PasswordResetView, для добавления
дополнительной логики:
from django.contrib.auth.views import PasswordResetView
from django.urls import reverse_lazy
from django.contrib import messages
class CustomPasswordResetView(PasswordResetView):
template_name = 'custom/password_reset.html'
email_template_name = 'custom/password_reset_email.html'
subject_template_name = 'custom/password_reset_subject.txt'
success_url = reverse_lazy('password_reset_done')
from_email = 'noreply@mysite.com'
def form_valid(self, form):
email = form.cleaned_data['email']
messages.success(
self.request,
f'Ссылка для сброса пароля отправлена на {email}'
)
return super().form_valid(form)
Результат выполнения кода:
"Ссылка для сброса пароля отправлена на user@example.com"
Пример . Использование с кастомной моделью пользователя
Если вы используете кастомную модель пользователя, убедитесь, что она содержит поле для email:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
phone = models.CharField(max_length=15, blank=True)
def __str__(self):
return self.email
Смотрите также
-
класс
LoginView,
который обрабатывает вход пользователя в систему -
класс
LogoutView,
который обрабатывает выход пользователя из системы -
класс
PasswordChangeView,
который позволяет изменить пароль авторизованного пользователя -
класс
PasswordResetConfirmView,
который подтверждает и устанавливает новый пароль