2011-05-27 73 views
2

在输入电子邮件地址并按下按钮后,我的Django站点的password_reset页面导致DoesNotExist异常。Django密码重置 - DoesNotExist例外

为密码复位功能所需的四个URL是在(主项目)urls.py为:

(r'^password_reset/$', 'appname.views.cust_password_reset'), 
(r'^password_reset/done/', 'appname.views.cust_password_reset_done'), 
(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'appname.views.cust_password_reset_confirm'), 
(r'^reset/done/$', 'appname.views.cust_password_reset_complete') 

以下是用于关联的视图的代码:

def cust_password_reset(request): 
    return password_reset(request, post_reset_redirect='password_reset/done',template_name='registration/password_reset_done.html') 

def cust_password_reset_done(request): 
    return password_reset_done(request, template_name='registration/password_reset_done.html') 

def cust_password_reset_confirm(request, uidb36=None, token=None): 
    return password_reset_confirm(request, uidb36=uidb36, token=token, 
    template_name='registration/password_reset_confirm.html', 
    post_reset_redirect='registration/reset/done/') 

def cust_password_reset_complete(request): 
    return password_reset_complete(request, 
    template_name='registration/password_reset_complete.html') 

电子邮件地址被正确检查有效性,但重定向到password_reset/done似乎没有发生。 URL保持为password_reset,但会导致具有值“站点匹配查询不存在”的DoesNotExist异常。

当手动访问时,URL和模板似乎正常工作,并且password_reset/done显示正确。
引用的模板是原始Django模板的精确副本,只添加了页眉/页脚。不使用自定义视图/模板的密码重置会导致相同的错误。

任何想法可能会导致这将不胜感激。

回答

2

该错误“站点匹配查询不存在”意味着settings.py中的SITE_ID与数据库中的实际对象Site不匹配。检查您的网站的id属性,并确保它与SITE_ID相同。

+0

settings.py中的'SITE_ID'是1,我不是(有意至少)在其他任何地方改变它。在发生错误时显示的请求信息的设置部分中,'SITE_ID'也是1,但这似乎直接来自settings.py。有可能password_reset视图中的某些内容可能会自动更改ID? – caroline 2011-05-30 08:14:58

+0

该错误非常明确;只有一件事会导致这种情况。检查你的数据库,并确保site_id是1。 – 2011-05-31 14:23:05

+0

它看起来好像根本没有数据库中的“Site”对象 - 当我添加一个时,它被赋予了'id' 1,现在密码重置完美地工作 - 感谢您的帮助。 – caroline 2011-05-31 15:26:21