[英]Django - custom decorator - parameter unfilled
我正在尝试创建一个自己的装饰器来检查用户是否满足某些条件(例如user.is_authenticated
),如果这个条件不成立,它们将被重定向到另一个页面(第二个参数)。
问题是装饰器不起作用,因为它需要另一个参数(视图函数)。
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def condition_or_redirect(view_func, condition, redirect_to):
def wrapped(request, *args, **kwargs):
if not condition(request.user):
return HttpResponseRedirect(reverse(redirect_to))
else:
return view_func(request, *args, **kwargs)
return wrapped
然后我想用它:
@condition_or_redirect(lambda x: not x.is_authenticated,'homepage')
def some_view....
代码有什么问题? 我知道它想要的是第一个参数,它是一个view_func,但我认为它是由装饰器本身添加的。
如果要将参数传递给装饰器,则需要定义第三级嵌套; 第一级接受参数并返回第二级,它接受函数本身。 所以:
def condition_or_redirect(condition, redirect_to):
def wrapper(view_func):
def wrapped(request, *args, **kwargs):
if not condition(request.user):
return HttpResponseRedirect(reverse(redirect_to))
else:
return view_func(request, *args, **kwargs)
return wrapped
return wrapper
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.