Django:内置的PasswordResetView中未发送电子邮件

时间:2019-02-25 04:20:55

标签: django django-forms

我要覆盖内置的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()

1 个答案:

答案 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覆盖并在其中放置自定义内容。