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

时间:2011-04-28 02:40:16

标签: django email

我正在使用通用视图django.contrib.auth.views.password_reset作为密码重置表单。原则上,这一切都有效,除了发出的电子邮件的主题行包含“example.com”,如:“example.com上的密码重置”。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:23)

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

的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])

使用admin或django shell更改site

详细了解网站框架here

  

Django如何使用网站框架

     

虽然你不需要   使用网站框架,这是强烈的   鼓励,因为Django需要   它在一些地方的优势。甚至   如果您的Django安装是   只为一个网站供电,你   应该花两秒钟来创造   您的域名和网站对象   名称,并在其中指向其ID   SITE_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
>>>
你在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()
你在settings.py中的

SITE_ID = 1

答案 1 :(得分:1)

假设您有管理站点,请转到“站点”组并将第一个更改为您的域?

或者settings.py中有什么东西。 http://docs.djangoproject.com/en/dev/topics/settings/#the-basics

<击>

我会检查并找出你

修改

我很确定这就是为了让它适合我而做的。

答案 2 :(得分:0)

在看了这么多答案之后,我直接挖掘了基础代码。然后我找到了一个简单的方法来配置它。

步骤 1:首先验证您是否有 password_reset_subject.txt 文件。 如果没有创建 password_reset_subect.txt 并复制下面的代码并将其粘贴到那里。

{% load i18n %}{% autoescape off %}
{% blocktranslate %}Password reset{{ site_name }}{% endblocktranslate %}
{% endautoescape %}

第 2 步:现在您需要在 save 方法中覆盖 subject_template_name。 类 ExamplePasswordResetSerializer(PasswordResetSerializer):

def save(self):
    request = self.context.get('request')
    opts = {
        'use_https': request.is_secure(),
        'from_email': getattr(settings, 'DEFAULT_FROM_EMAIL'),
        '**subject_template_name':'registration/password_reset_subject.txt**',#it should be your file path.
        'request': request,
        'html_email_template_name':'registration/password_reset_email.html',
    }
    opts.update(self.get_email_options())
    self.reset_form.save(**opts)