2013-11-14 2 views
19

Я пытаюсь обновить мой webapp от Django 1.5 до Django 1.6 и как часть моего набора приложений django, я использую django-registration 1.0.Django 1.6 и django-registration: встроенные проверки подлинности не найдены

После обновления до 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. Чтобы исправить эту проблему, переопределите URL-адреса по умолчанию, пока django-регистрация не будет обновлена ​​для 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

Я добавил код Jay, указанный выше, в мою регистрацию/backends/simple/urls.py. Я думаю, если вы используете значение по умолчанию, вы добавите его для регистрации/backends/default/urls.py. Это сработало для меня. – teewuane

+0

Я тоже это сделал, и он работает для меня, однако мои шаблоны игнорируются, а шаблоны администратора Django используются для сброса пароля и смены пароля. –

+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')), 

Джанго вно теперь включает в себя недостающие URLs

+0

Это на самом деле отлично работает для меня на данный момент. Будем следить за ним, хотя. –

0

фон

Этого вопрос, кажется, множится снова Джанго регистрация = = 1.0 и Django == 1.6, и задокументирован here на официальном запросе на выгрузку django-registration. Я использовал решение, предоставленное @Jay, но он не работал специально для части сброса пароля. Я закончил с этой ошибкой:

Ошибка

password_reset_confirm() got an unexpected keyword argument 'uidb36' 

Решение

Вместо этого я вытащил из другого Джанго-регистрационного хранилища (как указано в официальном запросе тяговой выше), выполнив следующие:

  1. pip удалить django-registration
  2. пункта установить мерзавец + мерзавец: //github.com/macropin/django-registration.git
  3. Изменить код «urls.py», как указано в посте по @Jay
  4. Помните это (спасибо!) является временным решением до тех пор, пока официальная поддержка регистрации django не будет обновлена ​​для Django 1.6.
+0

Нет django-registration [больше не поддерживается] (https://bitbucket.org/ubernostrum/django-registration/wiki/Home)? (Я бы предпочел, чтобы это официально было частью Django, чем Юг, но, возможно, это что-то для 1.8!) –

+0

Я надеюсь, что регистрация django будет захвачена кем-то (а может быть, и не будет). Я обновил шахту до 1,6, и поскольку все остальное работало, я использовал вилку, чтобы исправить эту проблему. – Will

Смежные вопросы