django 1.3中的内置密码重置视图问题

Posted

技术标签:

【中文标题】django 1.3中的内置密码重置视图问题【英文标题】:builtin password reset view problem in django1.3 【发布时间】:2011-11-22 02:35:25 【问题描述】:

嗨,我是 django 的新手,现在我正在尝试内置 重置密码视图。。 我点击链接link 但是当我单击 /password_reset/ 处的重置密码按钮时出现错误: /accounts/password_reset/ 错误

[Errno 10061] No connection could be made because the target machine actively refused it.
Exception Location: C:\Python27\lib\socket.py in create_connection, line 571


  'urls.py'

(r'^accounts/password_reset$','django.contrib.auth.views.password_reset','template_name':'user/password_reset_form.html','email_template_name':'user/password_reset_email.html') ,

(r'^accounts/password/reset/confirm/(?P[0-9A-Za-z]1,13)-(?P[0-9Aa-z]1,13- [0-9A-Za-z]1,20)/$', 'django.contrib.auth.views.password_reset_confirm', 'template_name' : 'user/password_reset.html' , 'post_reset_redirect': '/logout/' ),

     (r'^accounts/password_reset/done/$',<b>'django.contrib.auth.views.password_reset_done'</b>,'template_name':'user/password_reset_done.html'),


    (r'^accounts/change_password/$',<b> 'password_change'</b>, 'post_change_redirect' : '/accounts/change_password/done/'),

    (r'^accounts/change_password/done/$',<b> 'password_change_done'</b>,'template_name':'user/password_change_done.html'),


<b>password_reset_email.html</b>


% extends 'base.html'%
% block content%
% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %
% endblock %

我在“用户”文件夹中添加了必要的模板。请帮助我,提前致谢。

【问题讨论】:

【参考方案1】:

正如 rdegges 所说,这是一个连接错误。检查请求尝试访问的端口,并确保 Windows 防火墙设置为在该端口上接收。您可以通过查看 django 的回溯页面并查看“本地变量”来检查端口。

从外观上看,它是一个电子邮件端口。再看一下回溯,看看 django 是否尝试向端口 25 发送请求。如果是,请确保您的端口 25 已配置为接收。

此外,您还需要一个临时的 SMTP 服务器来进行测试,因为您可能不想使用真正的 SMTP 服务器。只需在运行 django 时在单独的命令提示符窗口中运行它,django 尝试通过端口 25 发送的任何电子邮件都将保存在工作目录中的“emails”文件夹中。

#/usr/bin/env python

from datetime import datetime
import asyncore
from smtpd import SMTPServer

class EmlServer(SMTPServer):
    no = 0
    def process_message(self, peer, mailfrom, rcpttos, data):
        filename = '%s-%d.eml' % (datetime.now().strftime('%Y%m%d%H%M%S'), self.no)
        f = open(filename, 'w')
        f.write(data)
        f.close()
        print '%s saved.' % filename
        self.no += 1


def run():
    foo = EmlServer(('localhost', 25), None)
    try:
        asyncore.loop()
    except KeyboardInterrupt:
        pass


if __name__ == '__main__':

    from os.path import exists, join
    from os import mkdir, chdir, getcwd

    target_directory = join( getcwd(), "emails" )
    if exists(target_directory):
        chdir(target_directory)
    else:
        try:
            mkdir(target_directory)
        except OSError:
            from sys import exit
            exit("The containing folder couldn't be created, check your permissions.")
        chdir(target_directory)
    print "Using directory %s" % target_directory

    run()

【讨论】:

如何配置25端口? 转到您的控制面板并打开“Windows 防火墙”。然后,单击“高级设置”并添加一个新的入站规则,允许端口 25 上的流量(在确认是端口 25 导致问题而不是另一个端口之后)。然后,确保您的端口 25 在网络上正确配置,就像您配置 apache 使用的端口(可能是 80) 我可以使用开发服务器(内置 django)来达到目的吗?很抱歉现在指定我在开发服务器中 您的代码将请求发送回服务器的 25 端口(确保是此端口),因此如果您想测试,则需要设置它。我将编辑一个文件以帮助调试 smtp 请求。只需在后台运行它并确保端口 25 上允许流量。 您还需要确保 django 正在向“localhost:25”或正确配置的“domain.com:25”发出请求【参考方案2】:

您遇到的错误是连接错误——这意味着您用于运行 Django 站点的服务器可能无法正常工作。以下是您可以在 Django 服务器上尝试的一些操作:

如果您通过python manage.py runserver 运行您的 Django 站点,您可以尝试简单地重新运行该命令。 如果您通过 apache 之类的网络服务器运行您的网站,请尝试重新启动 apache。

如果这些都不起作用,请发表评论,让我知道您在哪个操作系统上运行您的网站,以及您是如何运行它的,我们可以进行进一步的调试。

【讨论】:

我使用的是Windows7,并使用python manage.py runserver运行。[现在在开发服务器中],是否可以使用Django内置的开发服务器发送邮件?

以上是关于django 1.3中的内置密码重置视图问题的主要内容,如果未能解决你的问题,请参考以下文章

Django 在密码重置时不会重定向到正确的路径

使用 Django 的密码重置通知用户电子邮件无效

电子邮件验证和密码重置 - django rest 框架和 angularjs

Django内置重置密码的功能(发邮箱)

如何重置 Django 管理员密码?

Django通用类视图实现忘记密码重置密码功能