mhl*_*666 21 django google-app-engine django-registration django-nonrel
我正在使用Django-nonrel和注册应用程序.事情似乎工作正常,除非我尝试重置密码.当点击发送给我的重置密码链接时,Django会产生错误信息:
password_reset_confirm() got an unexpected keyword argument 'uidb36'
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有人看过它,知道什么是治愈方法?
编辑:
这个问题是由registration\auth_urls.py引起的 - 它们复制了django\contrib\auth\urls.py中的条目,在Django-nonrel中循环修补了该文件的版本.
任何想法为什么它在那里,我可以实际删除它或修复它否则?
Aid*_*dan 34
Django 1.6使用base 64编码作为用户ID而不是base 36编码.
如果您有任何自定义密码重置URL,则需要通过将uidb36替换为uidb64并使用斜杠替换该模式后面的破折号来更新它们.还要将"_","\"和" - "添加到可能与uidb64模式匹配的字符列表中.
例如,Django 1.5-中的urls.py中的这一行:
url(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
'django.contrib.auth.views.password_reset_confirm',
name='password_reset_confirm'),
Run Code Online (Sandbox Code Playgroud)
需要在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'),
Run Code Online (Sandbox Code Playgroud)
以下是详细说明更改的官方更改日志:https: //docs.djangoproject.com/en/1.6/releases/1.6/#django-contrib-auth-password-reset-uses-base-64-encoding-of-user -pk
我的解决方案是注释掉在registration\auth_urls.py中定义的urlpatterns,并将它们重新定义为django.contrib.auth中定义的urlpatterns的副本.
这是我更改后的auth_urls.py:
"""
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'),
)
'''
Run Code Online (Sandbox Code Playgroud)
我只需要改变uidb36
参数uidb64
,就像这样:
从:
url(r'^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
Run Code Online (Sandbox Code Playgroud)
至:
url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
Run Code Online (Sandbox Code Playgroud)
然后密码重置开始再次工作.
归档时间: |
|
查看次数: |
5453 次 |
最近记录: |