Django 1.6和django-registration:内置的身份验证视图未被提取

时间:2013-11-14 18:08:53

标签: django django-registration url-pattern django-1.6

我正在尝试将我的webapp从Django 1.5升级到Django 1.6,并且作为我使用的{jjoo应用程序集的一部分django-registration 1.0

升级到Django 1.6后,我的应用程序无法识别built-in authentication views。它们被集成在django注册中,如here所示,但它们已停止工作。

Django发行说明描述了change in the way these views should be integrated,将其与注册应用中看起来很好的源代码进行比较。

我正在介绍注册网址如下:

urlpatterns = patterns('',
     ...,
     url(r'^accounts/', include('registration.backends.default.urls')),
)

我在请求内置网址时遇到错误,例如/accounts/password/change/

django.core.urlresolvers.NoReverseMatch

NoReverseMatch: Reverse for 'password_change_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

有没有人知道为什么我会收到无反向匹配错误?

3 个答案:

答案 0 :(得分:35)

此错误的原因是django.contrib.auth.views使用的网址名称与registration.auth_urls不同。要修补此问题,请覆盖默认网址,直到django-registration更新为django 1.6,并使用与Django相同的名称。

from django.contrib.auth import views as auth_views


urlpatterns = patterns('',

      #override the default urls
      url(r'^password/change/$',
                    auth_views.password_change,
                    name='password_change'),
      url(r'^password/change/done/$',
                    auth_views.password_change_done,
                    name='password_change_done'),
      url(r'^password/reset/$',
                    auth_views.password_reset,
                    name='password_reset'),
      url(r'^password/reset/done/$',
                    auth_views.password_reset_done,
                    name='password_reset_done'),
      url(r'^password/reset/complete/$',
                    auth_views.password_reset_complete,
                    name='password_reset_complete'),
      url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
                    auth_views.password_reset_confirm,
                    name='password_reset_confirm'),

      #and now add the registration urls
      url(r'', include('registration.backends.default.urls')),
)

答案 1 :(得分:8)

以下是我使用的内容:

url(r'', include('registration.backends.default.urls')),
url(r'', include('django.contrib.auth.urls')),

Django contrib现在包括遗失的网址

答案 2 :(得分:0)

<强>背景

django-registration == 1.0和Django == 1.6似乎又出现了这个问题,并且在官方django-registration pull请求中记录了here。我使用了@Jay提供的解决方案,但它没有专门用于密码重置部分。我最终得到了这个错误:

错误

password_reset_confirm() got an unexpected keyword argument 'uidb36'

<强>解决方案

相反,我通过执行以下操作从另一个django-registration存储库(如上面的官方pull请求中提到的)中撤消:

  1. pip uninstall django-registration
  2. pip install git + git://github.com/macropin/django-registration.git
  3. 修改@Jay帖子中提及的'urls.py'代码(谢谢!)
  4. 请记住,这是一个临时解决方案,直到为Django 1.6更新官方django-registration支持