Django 1.6 y django-registration: las vistas de autenticación incorporadas no se detectaron
url-pattern django-1.6 (3)
Estoy tratando de actualizar mi aplicación web de Django 1.5 a Django 1.6 y como parte de mi conjunto de aplicaciones de django estoy usando django-registration 1.0 .
Después de actualizar a Django 1.6, mi aplicación ya no reconoce las vistas de autenticación integradas . Se integran en el registro de django como se puede ver here , pero dejaron de funcionar.
Las notas de la versión de Django describen un cambio en la forma en que deben integrarse estas vistas , al comparar eso con el código fuente en la aplicación de registro que se ve bien.
Estoy introduciendo las urls de registro de la siguiente manera:
urlpatterns = patterns('''',
...,
url(r''^accounts/'', include(''registration.backends.default.urls'')),
)
Recibo un error al solicitar las URL incorporadas como /accounts/password/change/
django.core.urlresolvers.NoReverseMatch
NoReverseMatch: Reverse for ''password_change_done'' with arguments ''()'' and keyword arguments ''{}'' not found. 0 pattern(s) tried: []
¿Alguien tiene una idea de por qué obtengo un error de no coincidencia?
Aquí está lo que he usado:
url(r'''', include(''registration.backends.default.urls'')),
url(r'''', include(''django.contrib.auth.urls'')),
Django contrib ahora incluye las URL que faltan
El motivo de este error es que las django.contrib.auth.views
utilizan nombres de url diferentes a los de registration.auth_urls
. Para solucionar este problema, anule las URL predeterminadas hasta que django-registration se actualice para django 1.6, y use los mismos nombres que 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'')),
)
Fondo
Este problema parece haberse recortado de nuevo para django-registration == 1.0 y Django == 1.6 y se documenta here en la solicitud de extracción oficial de django-registration. Utilicé la solución provista por @Jay pero no funcionó específicamente para la parte de restablecimiento de contraseña. Acabé con este error:
Error
password_reset_confirm() got an unexpected keyword argument ''uidb36''
Solución
En su lugar, saqué de otro repositorio de registro de django (como se menciona en la solicitud de extracción oficial anterior) haciendo lo siguiente:
- pip desinstalar django-registration
- pip instala git + git: //github.com/macropin/django-registration.git
- Modifique el código para ''urls.py'' como se menciona en la publicación de @Jay (¡gracias!)
- Recuerde que esta es una solución temporal hasta que se actualice el soporte oficial para el registro de django para Django 1.6