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)
Вернуться на верх