Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:密码重置电子邮件主题行包含';example.com_Django_Email - Fatal编程技术网

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

Django:密码重置电子邮件主题行包含';example.com,django,email,Django,Email,我正在使用通用视图django.contrib.auth.views.password\u reset作为密码重置表单。原则上,这一切都是可行的,除了发送的电子邮件的主题行包含“example.com”,如“example.com上的密码重置” 所以我环顾四周,但就我的一生而言,我无法找到如何将其更改为包含我的实际域名 有什么想法吗?假设你有一个管理站点,转到“站点”组,将第一个站点更改为你的域 要么如此,要么settings.py中有内容。 我会帮你查一查的 编辑: ... 4 fr

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

所以我环顾四周,但就我的一生而言,我无法找到如何将其更改为包含我的实际域名


有什么想法吗?

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

要么如此,要么settings.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])
我很确定这就是我为我所做的。

根据您的
网站发送电子邮件。它获取要使用的域名并将其传递到位于
registration/password\u reset\u email.html的html模板

django/trunk/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更改
站点

阅读更多关于站点框架的信息

Django如何使用站点框架

虽然不要求你 使用sites框架,它的功能非常强大 鼓励,因为Django 它在一些地方的优势。即使 如果您的Django安装是 仅为单个站点供电,您可以 应该需要两秒钟来创建 站点对象与您的域和 名称,并指向您的 站点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
SITE_ID = 1

在您的settings.py中:

SITE_ID = 2
SITE_ID = 1

谢谢你的详尽回答!你也可以通过管理员来完成。单击站点,然后编辑其中的“example.com”,Django现在将发送带有这些设置的密码重置电子邮件。我仍然无法相信(在2019年!)在您进行初始迁移时无法“从头开始”设置。我假设您可以编写一个“手工制作”的数据迁移,然后删除SITE_ID=1的默认“example.com”条目,然后添加您需要的任何一组站点,但是如果定义了允许的_主机的内容,那么使用这些内容初始化它将非常有效……这似乎是错误的。将此代码放入settings.py会引发:django.core.exceptions.AppRegistryNotReady:尚未加载应用程序。