Django:密码重置电子邮件主题行包含'example.com

jbr*_*del 16 email django

我正在使用通用视图django.contrib.auth.views.password_reset作为密码重置表单.原则上,所有的工作,除了指称发送的电子邮件的主题行包含"example.com",如:"密码重置在example.com".

所以我环顾四周,但对于我的生活,我无法找到如何更改此内容以包含我的实际域名.

有任何想法吗?

DTi*_*ing 23

PasswordResetForm将根据您的电子邮件contrib.sites.它获取要使用的域名,并将其传递给html模板registration/password_reset_email.html

Django的/主干/ Django的/的contrib/auth /中forms.py:

...
4     from django.contrib.sites.models import get_current_site
...

123     def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
124              use_https=False, token_generator=default_token_generator, from_email=None, request=None):
125         """
126         Generates a one-use only link for resetting password and sends to the user
127         """
128         from django.core.mail import send_mail
129         for user in self.users_cache:
130             if not domain_override:
131                 current_site = get_current_site(request)
132                 site_name = current_site.name
133                 domain = current_site.domain
134             else:
135                 site_name = domain = domain_override
136             t = loader.get_template(email_template_name)
137             c = {
138                 'email': user.email,
139                 'domain': domain,
140                 'site_name': site_name,
141                 'uid': int_to_base36(user.id),
142                 'user': user,
143                 'token': token_generator.make_token(user),
144                 'protocol': use_https and 'https' or 'http',
145             }
146             send_mail(_("Password reset on %s") % site_name,
147                 t.render(Context(c)), from_email, [user.email])
Run Code Online (Sandbox Code Playgroud)

使用admin或django shell来改变 site

阅读有关网站框架的更多信息here.

Django如何使用网站框架

尽管不要求您使用站点框架,但强烈鼓励它,因为Django在一些地方利用它.即使您的Django安装仅为单个站点供电,您也应该用两秒钟来创建包含您的域和名称的站点对象,并在SITE_ID设置中指向其ID.

在shell中你可以这样做:

>>> from django.contrib.sites.models import Site
>>> my_site = Site(domain='some_domain.com', name='Some Domain')
>>> my_site.save()
>>> print my_site.id
2
>>>
Run Code Online (Sandbox Code Playgroud)

在您的settings.py中:

SITE_ID = 2
Run Code Online (Sandbox Code Playgroud)

要么

>>> my_site = Site.objects.get(pk=1)
>>> my_site.domain = 'somedomain.com'
>>> my_site.name = 'Some Domain'
>>> my_site.save()
Run Code Online (Sandbox Code Playgroud)

在您的settings.py中:

SITE_ID = 1
Run Code Online (Sandbox Code Playgroud)