2 回答
![?](http://img1.sycdn.imooc.com/54584c5e0001491102200220-100-100.jpg)
TA贡献1783条经验 获得超4个赞
您可以将其推广到使用任意数量的位置参数和命名参数。此外,您可能想要使用update_wrapper
[Python-doc]来添加类似于csrf_exempt
“输出”视图的属性,否则@csrf_except
在外部函数中将不可用:
from functools import update_wrapper
def api_wrapper(func):
def api_inner(request, *args, **kwargs):
request.api_env = 'something'
return func(request, *args, **kwargs)
update_wrapper(api_inner, func, assigned=())
return api_inner
话虽这么说,这在某种程度上表明,在这种情况下使用基于类的视图可能会更好,因为这样就可以定义一个mixin,然后将其混合在方法解析顺序 (MRO)中作为可重用组件。在这种情况下,人们通常不必考虑更复杂的逻辑,例如参数或添加到函数中的属性,因为基于类的视图本身会处理这些问题。
![?](http://img1.sycdn.imooc.com/533e4d470001a00a02000200-100-100.jpg)
TA贡献1815条经验 获得超6个赞
尝试这个:
def api_wrapper():
def decorator(view_func):
@wraps(view_func)
def _wrapped_view(req, *args, **kwargs):
req.env = 'something'
return view_func(req, *args, **kwargs)
return _wrapped_view
return decorator
添加回答
举报