Django: в строке темы электронного письма для сброса пароля указано «example.com» - PullRequest
16 голосов
/ 28 апреля 2011

Я использую универсальное представление django.contrib.auth.views.password_reset для формы сброса пароля. В принципе, все это работает, за исключением того, что в строке темы отправляемого электронного письма содержится «example.com», например: «Сброс пароля на example.com».

Итак, я осмотрелся, но я не могу понять, как изменить это, чтобы оно содержало мое фактическое доменное имя.

Есть идеи?

Ответы [ 2 ]

23 голосов
/ 28 апреля 2011

PasswordResetForm отправляет электронное письмо на основе вашего contrib.sites. Он получает имя домена для использования и передает его в шаблон HTML на registration/password_reset_email.html

Джанго / багажник / Джанго / вно / авт / 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 Включая только один сайт, вы должно занять две секунды, чтобы создать объект сайта с вашим доменом и имя и укажите его идентификатор в вашем Настройка SITE_ID.

в оболочке вы можете сделать это, выполнив:

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

в ваших настройках.py:

SITE_ID = 2

или

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

в ваших настройках.py:

SITE_ID = 1
1 голос
/ 28 апреля 2011

Предполагая, что у вас есть сайт администратора, перейдите в группу "sites" и измените первый там на свой домен?

Либо это, либо что-то есть в settings.py. http://docs.djangoproject.com/en/dev/topics/settings/#the-basics

Я просто проверю и выясню для вас

EDIT:

Я вполне уверен, что именно это я и сделал, чтобы это сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...