所以,我非常熟悉在views.py中包装函数.所以我写了一个装饰,如果用户重定向到默认REDIRECT_URL 是在(某种反向的记录login_required); 这是基于我过去的观点:
def not_logged_in(redirect_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
def decorator(view_func, *args, **kwargs):
def wrapper(request, *args, **kwargs):
if not request.user.is_authenticated():
return view_func(*args, **kwargs)
else:
redirect_url = (request.REQUEST.get(redirect_field_name, redirect_url) or
settings.REDIRECT_URL)
return HttpResponseRedirect(redirect_url)
return wrapper
return decorator
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:'function' object has no attribute 'status_code'这是由MiddleWare期望HttpResponse引起的.当我response看到它的价值时,我看到了它<function wrapper at 0x2b3a9922a500>.
以下是我在调用它的方式urls.py:
url(r'login/',
not_logged_in(auth_views.login),
{'authentication_form': LoginForm },
),
Run Code Online (Sandbox Code Playgroud)
这是我对同一件事的实现.
def logout_required(view):
def f(request, *args, **kwargs):
if request.user.is_anonymous():
return view(request, *args, **kwargs)
return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
return f
Run Code Online (Sandbox Code Playgroud)
在urls.py:
urlpatterns = patterns("",
url(r"^login/", logout_required(login), {"template_name": "users/login.html"}, "login"),
# ...
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助(不确定).
| 归档时间: |
|
| 查看次数: |
5234 次 |
| 最近记录: |