1

一位客户要求我在重置密码时,他的 satchmo 商店应该发送一封 html 格式的邮件。

显然,satchmo 或 django 的 contrib.auth.views.password_reset 只发送原始电子邮件。

如何修改它以便能够发送 html 格式的邮件?

谢谢!

4

1 回答 1

5

我没有使用过 Satchmo,但这应该可以帮助您入门。

首先,子类化PasswordResetForm, 并重写save发送 html 电子邮件而不是纯文本电子邮件的方法。

from django.contrib.auth.forms import PasswordResetForm

class HTMLPasswordResetForm(PasswordResetForm):
    def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
             use_https=False, token_generator=default_token_generator, from_email=None, request=None):
        """
        Generates a one-use only link for resetting password and sends to the user
        """
        # Left as an exercise to the reader

您可以使用现有的PasswordResetForm作为指导。您需要send_mail用代码替换最后的调用以发送 html 电子邮件。有关发送 html 电子邮件的文档应该会有所帮助。

编写表单后,您需要将表单包含在password_reset. 正如我所说,我对 Satchmo 没有任何经验,但是查看源代码,我认为您想satchmo_store.accounts.urls通过更改 password_reset_dict 来更新。

# You need to import your form, or define it in this module
from myapp.forms import HTMLPasswordResetForm

#Dictionary for authentication views
password_reset_dict = {
    'template_name': 'registration/password_reset_form.html',
    # You might want the change the email template to .html
    'email_template_name': 'registration/password_reset.txt',
    'password_reset_form': HTMLPasswordResetForm,
}

# the "from email" in password reset is problematic... it is hard coded as None
urlpatterns += patterns('django.contrib.auth.views',
    (r'^password_reset/$', 'password_reset', password_reset_dict, 'auth_password_reset'),
    ...
于 2011-04-06T23:28:03.927 回答