【发布时间】:2011-08-13 09:43:03
【问题描述】:
所以,我非常熟悉在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
但是,我收到以下错误:'function' object has no attribute 'status_code' 这是由期望 HttpResponse 的 MiddleWare 引起的。当我查看response 的值时,我发现它是<function wrapper at 0x2b3a9922a500>。
这就是我在urls.py 中的称呼:
url(r'login/',
not_logged_in(auth_views.login),
{'authentication_form': LoginForm },
),
【问题讨论】:
-
你的问题是你的装饰器没有被使用。相反,您将
函数返回给 url()的第二个参数。你的装饰器看起来不错,但你应该像这样使用它:not_logged_in(<your arguments>)(<view callable>)