我有一个带有许多端点的烧瓶应用程序,我计划编写一个装饰器来记录API端点的操作。
例如,我有一个终点要删除API调用http://localhost:5000/api/owners/123/delete
下面的条目@route('/owners/<ownerid>/delete',methods=['DELETE'])
def deleteOwner(ownerid):
if request.method == 'DELETE':
""" delete action """
return jsonify({})
现在我想在此调用中添加一个装饰器,以便记录用户操作。所以我正在尝试使用装饰器,如下所示
def logtrail(func):
def wrap(*args, **kwargs):
print args
print kwargs.values() #This prints {"ownerid":"123"}
return func(kwargs)
return wrap
现在装饰如下
@route('/owners/<ownerid>/delete',methods=['DELETE'])
@logtrail
def deleteOwner(ownerid):
if request.method == 'DELETE':
""" delete action """
return jsonify({})
当我用@logtrail装饰我的原始API方法时,&#34; ownerid&#34;我需要作为位置参数作为{&#34; ownerid&#34;:&#34; 123&#34;}传递给装饰器函数。
我是装饰员的新手,需要一些帮助来解决这个问题。
答案 0 :(得分:1)
问题与变量如何在python上传递/参数有关。
要解决此问题,只需将return func(kwargs)
更改为return func(**kwargs)
,这样kwargs就会作为关键字而非dict传递。
def logtrail(func):
def wrap(*args, **kwargs):
print args
print kwargs.values() #This prints {"ownerid":"123"}
return func(**kwargs)
return wrap