2011-04-28 126 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