我不是最好的装饰者,我正在尝试为任务建立一个(显然)。基本上我有我想要装饰的功能(这是一个Django应用程序,但它应该没关系)
def foo(request, param):
# do something w/ param
现在我需要构建一个装饰器来接受一个参数:
@mydecorator('VALUE')
def foo(request, param)
pass
所以基本上我需要我的装饰者接受值foo,对请求做一些工作,然后返回
这是我到目前为止所做的,但它不起作用:(
def mydecorator(val):
@wraps(function)
def decorator(request, *args, **kwargs):
# do something with request with respect to val
return function(request, *args, **kwargs)
return decorator
需要帮助,谢谢
答案 0 :(得分:2)
除了foo最后遗漏':'的第二个示例定义之外,主要问题是mydecorator应该返回一个装饰器,因为它是一个函数调用。
如果mydecorator不接受争论你会写:
@mydecorator
def foo(request, param)
pass
而不是
@mydecorator()
def foo(request, param)
pass
鉴于您应该从以下知识开始:
from functools import wraps
def mydecorator(val):
def myrealdecorator(function):
@wraps(function)
def decorator(request, *args, **kwargs):
# do something with request with respect to val
print 'I know about', val
return function(request, *args, **kwargs)
return decorator
return myrealdecorator
@mydecorator('VALUE')
def foo(request, param):
print 'inside foo'
foo('arg1', 'arg2')