Django отправляет почту при обновлении пароля
У меня есть ChangePasswordView для моего User:
class ChangePasswordView(PasswordChangeView):
form_class = ChangePasswordForm
success_url = reverse_lazy('password_success')
#success view
def password_success(request):
return render(request, 'accounts/password_success.html')
Я использовал функцию send_mail
для уведомления пользователей, когда они обновляют свою информацию, однако в данном случае у меня возникли некоторые проблемы.
Я добавил это в ChangePasswordView:
def form_valid(self, form):
form.update_password_email()
return redirect(self.success_url)
И это в моей ChangePasswordForm:
def update_password_email(self):
email = self.cleaned_data.get('email', None)
if email and self.is_valid():
send_mail(
'Password changed',
'Message',
NOTIFICATION_EMAIL,
[self.cleaned_data['email']],
fail_silently=True
)
Но это не работает. Я перехожу на страницу смены пароля django, ввожу свой старый пароль, новый пароль и подтверждаю его, но логика не работает. Вместо этого меня перенаправляют на страницу success_url
без смены пароля и без уведомления по электронной почте.
Происходит ли проблема из-за моего представления или моей формы? И какая проблема возникает.
Также нужны ли мне form_valid():
и if self.is_valid():
или один из них лишний? Я предполагаю, что они делают одно и то же.
form_valid
вызывается после проверки формы (https://github.com/django/django/blob/3b79dab19a2300a4884a3d81baa6c7c1f2dee059/django/views/generic/edit.py#L153).
Что бы я сделал, так это вызвал send_mail
изнутри form_valid
:
def form_valid(self, form):
email = form.cleaned_data["email"]
send_email(
"Password changed",
"Message",
NOTIFICATION_EMAIL,
[email],
fail_silently=True,
)
return redirect(self.success_url)