尝试创建重置密码身份验证时出现Password_reset_done错误

时间:2017-11-01 15:21:44

标签: python django url

我想允许用户在用户注销时重置密码,但忘记密码。

我正在使用django身份验证框架并创建了reset_password和password_reset_done映射器。

问题:虽然我已创建了password_reset_done函数,但我仍然遇到以下错误。我错过了一个导致此错误的步骤吗?我不知道我做错了什么。

我发布了我认为与我尝试做的相关的所有代码。

使用完整的TraceBack进行编辑:

enter image description here

  

以下是代码:

relative urls.py

from django.conf.urls import url
from . import views

from django.contrib.auth.views import login, logout, password_reset, password_reset_done


urlpatterns = [
        url(r'^$', views.vedic_view, name = 'vedic_home_view'),
        url(r'^login/$', login, {'template_name' : 'exist/login.html'}, name = 'login'),
        url(r'^logout/$', logout, {'template_name' : 'exist/logout.html'}, name = 'logout'),
        url(r'^register/$', views.register_view, name = 'register'),
        url(r'^profile/$', views.view_profile, name = 'view_profile'),
        url(r'^profile/edit/$', views.edit_profile, name = 'edit_profile'),
        url(r'^change-password/$', views.change_password, name = 'change_password'),


        url(r'^reset-password/$', password_reset, name = 'reset_password'),
        url(r'^reset-password/done/$', password_reset_done, name = 'password_reset_done')
]

主要urls.py

from django.conf.urls import url
from django.contrib import admin


from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^admin/', admin.site.urls),
] +  static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)


from django.conf.urls import include
from django.views.generic import RedirectView


urlpatterns += [
    url(r'^exist/', include('exist.urls', namespace = 'exist')),
        url(r'^$', RedirectView.as_view(url='/exist/', permanent=True)),
]

3 个答案:

答案 0 :(得分:0)

password_reset_done位于exists命名空间内。看起来您正在尝试reverse指定的URL而不在某处包含命名空间参数。我们需要查看完整的回溯以确切了解发生的位置。

由于您使用的是内置auth视图,因此最简单的修复方法可能是将密码重置处理移至主urls.py。请注意,在您的回溯中,内置password_reset视图执行此操作:

post_reset_redirect = reverse('password_reset_done')

此处的默认实现是reversepassword_reset_done,没有任何命名空间。将相关网址移至主urls.py将允许通过reverse访问它们而不使用命名空间参数,从而使内置视图更快乐。

答案 1 :(得分:0)

我意识到问题所在。

对于内置重置视图,有一个post_reset_redirect变量,它使用默认实现reverse(password_reset_done)转到password_reset_done视图。

问题是在我的主urls.py文档中我创建了命名空间变量

namespace = exist

但是我没有覆盖默认的post_reset_redirect实现 从reverse(password_reset_done)reverse(exist:password_reset_done)

所以我现在的

  

url(r'^reset-password/$', password_reset, name = 'reset_password'),

现在应该看起来像

  

url(r'^reset-password/$', { 'post_reset_redirect': 'exist:password_reset_done'}, password_reset, name = 'reset_password')

答案 2 :(得分:-1)

如我所见,您的主网址中未包含relative.url

修改

在相对网址

app_name='exists' #with this name you can call in main urls
urlpatterns = [
        url(r'^$', views.vedic_view, name = 'vedic_home_view'),
        #...

在主网址:

urlpatterns = [
    url(r'^exists/', include('exists.urls')),
    #...

编辑2

Here'sthe docs on the subject,它通过示例解释得比我好。