Подтвердить что ты не робот

Django 1.6 и django-registration: встроенные проверки подлинности не подобраны

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

После обновления до Django 1.6 мое приложение больше не распознает встроенные проверки подлинности. Они интегрированы в регистрацию django, как можно увидеть здесь, но они перестали работать.

В примечаниях к выпуску Django описывается изменение того, как эти представления должны быть интегрированы, при сравнении этого с исходным кодом в приложении регистрации, который выглядит нормально.

Я вводил регистрационные URL следующим образом:

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

Я получаю ошибку при запросе встроенных URL-адресов, например /accounts/password/change/

django.core.urlresolvers.NoReverseMatch

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

У кого-нибудь есть идея, почему я получаю ошибку без обратного соответствия?

4b9b3361

Ответ 1

Причиной этой ошибки является то, что 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')),
)

Ответ 2

Вот что я использовал:

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

В Django Contrib теперь входят отсутствующие URL-адреса

Ответ 3

Фон

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

Ошибка

password_reset_confirm() got an unexpected keyword argument 'uidb36'

Решение

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

  • pip удалить django-registration
  • pip install git + git://github.com/macropin/django-registration.git
  • Измените код для 'urls.py', как указано в сообщении от @Jay (спасибо!)
  • Помните, что это временное решение, пока официальная поддержка регистрации django не будет обновлена ​​для Django 1.6.