2013-11-14 37 views
19

我想升级我的Web应用程序从Django 1.5到Django 1.6,并作为我使用的一组Django应用程序的一部分我使用django-registration 1.0Django 1.6和Django注册:内置认证意见不拾起

升级到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: [] 

有没有人有一个想法,为什么我得到一个没有反向匹配错误?

回答

35

此错误的原因是django.contrib.auth.views使用不同的url名称比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')), 
) 
+0

我将上面列出的代码添加到我的注册/后端/ simple/urls.py。我猜如果你使用的是默认值,你可以将它添加到registration/backends/default/urls.py中。这对我有效。 – teewuane

+0

我也这样做了,它适用于我,但是我的模板被忽略,并且Django Admin模板被用于密码重置和更改密码。 –

+3

在django注册库中有一个针对此问题的请求。我会认为它将被整合到下一个版本中。请按照此处的讨论:https://bitbucket.org/ubernostrum/django-registration/pull-request/63/ – yellowcap

8

下面是我用什么:

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

的Django的contrib现在包括缺少网址

+0

这实际上对我来说工作正常。虽然会留意它。 –

0

背景

这个问题似乎是Django的登记出现反复= = 1.0和Django == 1.6,并在官方django注册请求中记录here。我使用@Jay提供的解决方案,但它并不专门用于密码重置部分。我结束了这个错误:

错误

password_reset_confirm() got an unexpected keyword argument 'uidb36' 

解决方案

相反,我从另一个Django的注册仓库拉(如上面的官方拉动请求中提到)通过执行如下:

  1. pip uninstall django-registration
  2. PIP安装混帐混帐+://github.com/macropin/django-registration.git
  3. 修改 'urls.py' 的代码在后由@Jay提到
  4. 记住这一点(谢谢!)是一个临时的解决方案,直到官方Django注册支持更新为Django 1.6
+0

是不是django注册[不再维护](https://bitbucket.org/ubernostrum/django-registration/wiki/Home)? (我宁愿这是Django官方的一部分,而不是南方,但也许这是1.8的东西!) –

+0

我希望django注册被某人接管(或者可能不会)。我将我的升级版本升级到1.6版本,并且由于其他一切正常,我使用fork来解决这个问题。 – Will