我正在尝试实施密码重置功能。</ p>
我的网址包含:
url(r'^password_reset/$','django.contrib.auth.views.password_reset', {'template_name': 'resetpassword.html', 'post_reset_redirect' : '/password_reset/mailed/'},
name="password_reset"),
url(r'^password_reset/mailed/$',
'django.contrib.auth.views.password_reset_done',{'template_name': 'resetpassword_mailed.html'}),
url(r'^password_reset/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
'django.contrib.auth.views.password_reset_confirm',
{'post_reset_redirect' : '/password_reset/complete/'}),
url(r'^password_reset/complete/$',
'django.contrib.auth.views.password_reset_complete',{'template_name': 'resetpassword_complete.html'}),
和settings.py:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.mail.ru'
EMAIL_HOST_USER = 'noreply@mysite.com'
DEFAULT_FROM_EMAIL = 'noreply@mysite.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
网址路由工作正常,但不会发送电子邮件。
如果我尝试使用Django shell并测试发送:
email = EmailMessage('Subject', 'Body', to=['test@email.com'])
email.send()
它的效果也很好。
我该如何解决这个问题?我没有收到任何错误消息,也不知道如何调试它。
UPD 我发现在django / contrib / auth / views.py:password_reset方法中我总是去
else:
post_reset_redirect = resolve_url(post_reset_redirect)
部分,永远不会实际发送电子邮件。怎么样?
if post_reset_redirect is None:
post_reset_redirect = reverse('password_reset_done')
else:
post_reset_redirect = resolve_url(post_reset_redirect)
if request.method == "POST":
form = password_reset_form(request.POST)
if form.is_valid():
print 'reset form valid'
opts = {
'use_https': request.is_secure(),
'token_generator': token_generator,
'from_email': from_email,
'email_template_name': email_template_name,
'subject_template_name': subject_template_name,
'request': request,
'html_email_template_name': html_email_template_name,
}
if is_admin_site:
opts = dict(opts, domain_override=request.get_host())
form.save(**opts)
return HttpResponseRedirect(post_reset_redirect)
答案 0 :(得分:1)
如果用户没有密码(例如使用create_user()
创建),密码重置将不会发送任何内容!确保您通过以下方式创建密码:
password = User.objects.make_random_password()
答案 1 :(得分:0)
可能是一个微不足道的问题,但您用来测试的用户是否有有效的电子邮件集?如果它为空则不会发送电子邮件,也不会引发异常。
查看是否正在生成电子邮件的其他方法是使用控制台后端:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
并查看控制台,因为电子邮件应该出现在那里。
由于