在尝试创建装饰器来包装我的应用程序视图时,我无法将参数传递给我的装饰器。 我的观点目前看起来像这样:
@api_view(['GET', 'POST'])
@permission_classes((IsAuthenticated,))
def some_view(request):
问题是,除了请求之外,我还想向我的通用视图传递一个额外的参数。 我试过这个:
@api_view(['GET', 'POST'])
@permission_classes((IsAuthenticated,))
@generic_view("some argument")
def some_view(request):
使用此generic_view:
def generic_view(argument):
def _method_wrapper(func):
def decorator(request, *args, **kwargs):
some_function(argument)
data = func(request)
return Response(data, status=200)
return decorator
return _method_wrapper
问题是参数没有通过。我寻找它和争论,args和kwargs并且它刚刚没有通过。 顺便说一句,我正在使用django 1.8,python 2.7。
答案 0 :(得分:0)
这可以通过lambda
函数
decorator_with_arguments = lambda decorator: lambda *args, **kwargs:lambda func: decorator(func, *args, **kwargs)
现在你用这个装饰器封装你的函数。以下内容适用:
@decorator_with_arguments
def generic_view(function,arg):
def _method(request, *args, **kwargs):
print(arg) # print arg : Python 2.*
# data = func(request)
return function(request, *args, **kwargs)
return _method
现在,您可以在generic_view
views
作为 @decorator
@generic_view("some argument")
def some_view(request):
pass
# output
>>> 'some argument'