如果已登录用户具备所需的权限级别,则只能执行不同功能。
为了让我的生活更简单,我想使用装饰器。下面我尝试在“装饰”的函数上设置属性permission
- 如下所示。
def permission(permission_required):
def wrapper(func):
def inner(*args, **kwargs):
setattr(func, 'permission_required', permission_required)
return func(*args, **kwargs)
return inner
return wrapper
@permission('user')
def do_x(arg1, arg2):
...
@permission('admin')
def do_y(arg1, arg2):
...
但是当我这样做时:
fn = do_x
if logged_in_user.access_level == fn.permission_required:
...
我遇到一个错误:'function' object has no attribute 'permission_required'
。我缺少了什么?
functools.wraps
。不是直接解决你的问题,而是因为当每个函数最终都被命名为“inner”,采用(*args, **kwargs)
,检查错误源时会变得异常困难,所以使用它将可以避免这种情况。 - abarnert