我要覆盖内置的PasswordResetView
,但不会发送电子邮件。我当前正在使用django.core.mail.backends.console.EnailBackend
,但是电子邮件的内容未显示在控制台上。
我的代码就是这样
class CustomPasswordResetView(PasswordResetView):
email_template_name = 'accounts/password_reset_email.html'
form_class = CustomForm
template_name = 'accounts/password_reset.html'
subject_template_name = 'accounts/password_reset_subject.txt'
title = 'Custom Title'
success_url = reverse_lazy('accounts/password_reset_done')
它会按预期重定向到password_reset_done
,但是电子邮件不会显示在condole上。
有什么我想念的吗?只要我看到Django的代码,就无法在PasswordResetView
中找到发送电子邮件的处理方式,我是否必须手动编写电子邮件功能?
forms.py
class CustomPasswordResetForm(PasswordResetForm):
def __init__(self, *args, **kwargs):
super(CustomPasswordResetForm, self).__init__(*args, **kwargs)
...
def save(self, ...):
super().save()
答案 0 :(得分:1)
问题在于,电子邮件是sent from the form,而不是视图。因此,如果您使用CustomForm
,则最好采用以下形式实现send email方法:
class CustomForm(forms.Form):
...
def send_mail(self):
return send_mail(
'Subject here',
'Here is the message.',
'from@example.com',
[self.cleaned_data.get('email')],
fail_silently=False,
)
def is_valid(self):
valid = super(CustomForm, self).is_valid()
if valid:
self.send_email()
return valid
或者您可以从PasswordResetForm
覆盖并在其中放置自定义内容。