【问题标题】:Password_reset_done error when attempting to create reset password authentication尝试创建重置密码身份验证时出现 Password_reset_done 错误
【发布时间】:2017-11-01 15:21:44
【问题描述】:

我想允许用户在用户退出并且忘记密码时重置密码。

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

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

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

使用完整的 TraceBack 进行编辑:

代码如下:

相对 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)),
]

【问题讨论】:

    标签: python django url


    【解决方案1】:

    password_reset_done 位于 exists 命名空间内。看起来您正在尝试 reverse 命名的 URL,而不在某处包含命名空间参数。我们需要查看您的完整回溯,才能准确了解发生的情况。

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

    post_reset_redirect = reverse('password_reset_done')
    

    这里的默认实现是 reversepassword_reset_done 没有任何命名空间。将相关 URL 移至您的主 urls.py 将允许通过 reverse 访问它们,而无需命名空间参数,从而使内置视图更快乐。

    【讨论】:

    • 我已经添加回溯
    • 如何将密码重置处理转移到我的主要urls.py
    • 除非我有误解,否则您使用的是 password_resetpassword_reset_done 的内置视图和模板。如果是这种情况,您可以从您的相对 urls.py 中删除这两个 URL 模式,并将它们放入您的主 urls.py,确保也从您的主 urls.py 中导入来自 django.contrib.auth.views 的两个视图。这将允许内置视图和模板相互调用而不用担心命名空间。
    • 好的,我明白了。顺便说一句,我没有可以呈现重置视图的视图功能,我只有网址。
    • 是的,您可以通过 URL 将几个可选参数传递给这些视图:docs.djangoproject.com/en/1.11/topics/auth/default/…
    【解决方案2】:

    我意识到问题所在。

    对于内置的重置视图,有一个 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')

    【讨论】:

      【解决方案3】:

      如我所见,您的主要网址中没有包含 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,它的例子比我解释得更好。

      【讨论】:

      • 我不确定你的意思。 url(r'^exist/', include('exist.urls', namespace = 'exist')) 不是对目标模块的引用吗?
      • 像你添加“exit”你需要添加“relative”:url(r'^relative/', include('relative.urls', namespace = 'relative')),
      • 好吧,从您发布的代码看来,相对 url 与主 url 位于不同的文件中(在应用程序内)。如果是这种情况,你应该在你的主 url 文件中包含 (projectname/urls.py) 并添加 app_name='your_app_name' 来调用它,因为你已经调用了 include('exist.url'...
      • @guillermochamorro 应用名称存在。那么对于您的建议,语法是什么样的?
      • @WalthamWECAN 我将编辑我的答案以展示我的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2013-09-21
      • 2021-02-06
      • 2019-10-28
      • 1970-01-01
      相关资源
      最近更新 更多