我正在使用內置的auth_views.password_reset(_confirm, _done, _complete)
功能,並且我想限制對這些視圖的訪問只限於未登錄(匿名)的用戶,因爲它沒有任何意義讓登錄用戶重置密碼。django anonymous_required自定義裝飾器與密碼重設視圖衝突
我發現這個鏈接@login_required相反:http://passingcuriosity.com/2009/writing-view-decorators-for-django/
的裝飾工程auth_views.password_reset
。我在我的網站中使用它
url(r'^password/reset/$',
anonymous_required(auth_views.password_reset),
name='auth_password_reset'),
由於某種原因,它不適用於其他3個視圖。例如以下網址:
url(r'^password/reset/done/$',
anonymous_required(auth_views.password_reset_done),
name='auth_password_reset_done'),
給了我以下錯誤:
Exception Value:
Reverse for 'django.contrib.auth.views.password_reset_done' with arguments '()' and keyword arguments '{}' not found.
誰能告訴我爲什麼?
給出的裝飾代碼是:
def anonymous_required(function=None, home_url=None, redirect_field_name=None):
"""Check that the user is NOT logged in.
This decorator ensures that the view functions it is called on can be
accessed only by anonymous users. When an authenticated user accesses
such a protected view, they are redirected to the address specified in
the field named in `next_field` or, lacking such a value, the URL in
`home_url`, or the `USER_HOME_URL` setting.
"""
if home_url is None:
home_url = settings.USER_HOME_URL
def _dec(view_func):
def _view(request, *args, **kwargs):
if request.user.is_authenticated():
url = None
if redirect_field_name and redirect_field_name in request.REQUEST:
url = request.REQUEST[redirect_field_name]
if not url:
url = home_url
if not url:
url = "/"
return HttpResponseRedirect(url)
else:
return view_func(request, *args, **kwargs)
_view.__name__ = view_func.__name__
_view.__dict__ = view_func.__dict__
_view.__doc__ = view_func.__doc__
return _view
if function is None:
return _dec
else:
return _dec(function)