name keywords google etiquetas ejemplos django google-app-engine django-nonrel django-registration

django - keywords - meta tags google



Problema de registro de Django-nonrel+Django: argumento de palabra clave inesperado ''uidb36'' al restablecer la contraseƱa (4)

Django 1.6 usa la codificación de la base 64 para la identificación del usuario en lugar de la codificación de la base 36.

Si tiene alguna URL personalizada de restablecimiento de contraseña, deberá actualizarla reemplazando uidb36 con uidb64 y el guión que sigue a ese patrón con una barra inclinada. Agregue también "_", "/" y "-" a la lista de caracteres que pueden coincidir con el patrón uidb64.

Por ejemplo, esta línea en urls.py en Django 1.5-:

url(r''^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$'', ''django.contrib.auth.views.password_reset_confirm'', name=''password_reset_confirm''),

Deberá cambiarse a esto en Django 1.6+:

url(r''^reset/(?P<uidb64>[0-9A-Za-z_/-]+)/(?P<token>.+)/$'', ''django.contrib.auth.views.password_reset_confirm'', name=''password_reset_confirm''),

Aquí está el registro de cambios oficial que detalla el cambio: https://docs.djangoproject.com/en/1.6/releases/1.6/#django-contrib-auth-password-reset-uses-base-64-encoding-of-user-pk

Estoy usando Django-nonrel con la aplicación de registration . Las cosas parecen funcionar bien, excepto cuando trato de restablecer mi contraseña. Al hacer clic en el enlace para restablecer la contraseña que se me envió por correo electrónico, Django genera un mensaje de error:

password_reset_confirm() got an unexpected keyword argument ''uidb36''

Mi pregunta: ¿alguien lo ha visto y sabe cuál es la cura?

EDITAR:

El problema se debe al registro / auth_urls.py: duplican las entradas en django / contrib / auth / urls.py, circunvolviendo la versión parcheada del archivo en Django-nonrel.

¿Alguna idea de por qué está ahí y, de hecho, puedo eliminarla o arreglarla?


Mi solución fue comentar los patrones url definidos en registration / auth_urls.py y redefinirlos como una copia de los urlpatterns definidos en django.contrib.auth.

Aquí está mi auth_urls.py después del cambio:

""" URL patterns for the views included in ``django.contrib.auth``. Including these URLs (via the ``include()`` directive) will set up the following patterns based at whatever URL prefix they are included under: * User login at ``login/``. * User logout at ``logout/``. * The two-step password change at ``password/change/`` and ``password/change/done/``. * The four-step password reset at ``password/reset/``, ``password/reset/confirm/``, ``password/reset/complete/`` and ``password/reset/done/``. The default registration backend already has an ``include()`` for these URLs, so under the default setup it is not necessary to manually include these views. Other backends may or may not include them; consult a specific backend''s documentation for details. """ from django.conf.urls.defaults import * #from django.contrib.auth import views as auth_views from django.contrib.auth import urls as auth_urls urlpatterns = auth_urls.urlpatterns '''''' Commented out, this is what caused my problems: urlpatterns = patterns('''', url(r''^login/$'', auth_views.login, {''template_name'': ''registration/login.html''}, name=''auth_login''), url(r''^logout/$'', auth_views.logout, {''template_name'': ''registration/logout.html''}, name=''auth_logout''), url(r''^password/change/$'', auth_views.password_change, name=''auth_password_change''), url(r''^password/change/done/$'', auth_views.password_change_done, name=''auth_password_change_done''), url(r''^password/reset/$'', auth_views.password_reset, name=''auth_password_reset''), url(r''^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$'', auth_views.password_reset_confirm, name=''auth_password_reset_confirm''), url(r''^password/reset/complete/$'', auth_views.password_reset_complete, name=''auth_password_reset_complete''), url(r''^password/reset/done/$'', auth_views.password_reset_done, name=''auth_password_reset_done''), ) ''''''


Solo tuve que cambiar el argumento uidb64 a uidb64 , así:

DE:

url(r''^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$'',

A:

url(r''^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$'',

Luego, los restablecimientos de contraseña comenzaron a funcionar nuevamente.


Supongo que tu password_reset_confirm url en urls.py parece algo similar a

url (r ''^ accounts / password_reset / (? P [0-9A-Za-z] {1,13}) - (? P [0-9A-Za-z] {1,13} - [0-9A -Za-z] {1,20}) / $ '', password_reset_confirm, {'' post_reset_redirect '':'' / accounts / password_reset / complete / ''}, name = "password_reset_confirm"),

y su enlace en password_reset_email.html se parece a {{protocol}}: // {{domain}} {% url ''password_reset_confirm'' uidb36 = uid token = token%}

Simplemente cambie uib36 a uib64 en ambos lugares, funciona.