我正在尝试将access_rights
装饰器添加到我的瓶子应用程序中,以检查访问路由时的权限。但是,它没有得到修饰函数的参数,这会导致在再次调用修饰函数时出错。在
下面是使用decorator的代码示例:
@route('/users')
@access_rights({'POST': ['admin']})
def users(user):
pass
user
参数来自我编写的一个瓶子插件,它从请求传递的令牌中获取用户。这是我现在的装修师:
这两个都是空的。但是,当我按如下方式更改装饰器时,它会起作用:
def access_rights(permissions):
def decorator(f):
return f
return decorator
我很少使用decorator,但是根据我的理解,上面的两个实现都应该用它的原始参数调用users
函数,但是由于某些原因,第一个实现没有得到参数。为什么?在
路由处理程序
users
需要一个参数。在但是您的装饰器
access_rights
,它包围了users
,它并没有传递user
参数;它只是传递它接收到的任何参数(在本例中,没有任何参数,因此错误消息的“0给定”部分)。在一个例子应该有助于澄清。以下是一个小而完整的应用程序,基于您的原始代码:
请注意,我所做的唯一实质性的更改是让
access_rights
实际上向下传递一个user param。(它如何决定用户,自然,取决于你大概是“尚未实现”的部分,你在评论中指出)。在希望有帮助!在
相关问题 更多 >
编程相关推荐