2011-04-28 127 views
11

我使用通用视图django.contrib.auth.views.password_reset为密码重置窗体。原则上,除了发送的电子邮件的主题行包含'example.com',如:“在example.com上重置密码”之外,它都可以工作。Django:密码重置电子邮件主题行包含'example.com

所以我环顾四周,但对于我的生活,我无法找到我如何改变这个来包含我的实际域名。

任何想法?

回答

17

PasswordResetForm将根据您的contrib.sites的电子邮件。它得到的域名使用和registration/password_reset_email.html

的Django /后备箱把它传递给HTML模板/ 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]) 

使用管理员或Django的壳来改变在site

阅读更多关于站点框架here

的Django如何使用站点框架

虽然它不要求你 使用站点框架,但是强烈 鼓励,因为Django的发生在几个地方 它的优势。即使 如果你的Django安装 只有一个单一的网站上电,你 应采取两秒钟创建 与您的域名和 名,并指向其ID站点对象在 SITE_ID设置。在您的settings.py

>>> 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 
>>> 

:在你的settings.py

SITE_ID = 2 

>>> my_site = Site.objects.get(pk=1) 
>>> my_site.domain = 'somedomain.com' 
>>> my_site.name = 'Some Domain' 
>>> my_site.save() 

壳您可以通过做到这一点

SITE_ID = 1 
+0

谢谢你的彻底答案! – jbrendel 2011-04-29 04:59:56

+0

你也可以通过管理员来做到这一点。点击网站,然后编辑那里的“example.com”,然后Django将发送带有这些设置的密码重置电子邮件。 – 2012-08-29 15:35:19