Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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
Python 忘记密码电子邮件未发送到Django_Python_Django - Fatal编程技术网

Python 忘记密码电子邮件未发送到Django

Python 忘记密码电子邮件未发送到Django,python,django,Python,Django,我正在尝试实现密码重置功能 我的URL包含: 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.

我正在尝试实现密码重置功能

我的URL包含:

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'}),
URL路由工作正常,但不会发送电子邮件

如果我尝试使用Django shell并测试发送:

email = EmailMessage('Subject', 'Body', to=['test@email.com'])
email.send()
而且效果也不错

我怎样才能解决这个问题?我没有收到任何错误消息,也不知道如何调试它

UPD 我发现在django/contrib/auth/views.py中,我总是使用密码重置方法

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)

可能是一个很小的问题,但是您用来测试的用户是否有一个有效的电子邮件集?如果为空,则不会发送电子邮件,也不会引发异常

检查一下

查看是否正在生成电子邮件的其他方法是使用控制台后端:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
看看控制台,因为电子邮件应该出现在那里


谢谢

如果用户没有密码(例如使用
create\u user()
创建),密码重置将不会发送任何信息!确保您还通过以下方式创建了密码:
password=User.objects.make_random_password()

然后,您还需要设置密码并保存,例如

user.set_password(password)
user.save()

您正在使用
manage.py runserver
?@Anentropic是,为什么?请尝试
email.send(fail\u silent=False)
并在此处发布错误。@Leistungsabfall email.send(fail\u silent=False)中没有错误。从django/contrib/auth/forms.PasswordResetForm send_mail方法的外壳集断点发送电子邮件可以正常工作,并检查是否一切正常。谢谢。是,用户有一封有效的电子邮件。我已经尝试了您建议的有关电子邮件\u后端的内容,但没有任何更改,控制台中也没有显示任何内容。@seledkalebedka,您是否通过POST将数据提交到“密码\u重置”url?Django只会在“method=='POST'”和“form.is_valid()”您已经解决了吗?谢谢
user.set_password(password)
user.save()