许可的Python装饰器

时间:2015-11-24 05:55:05

标签: python django decorator

这是我第一次使用装饰器,我想展示类似的东西

import functools

def checkUser(tag):
    def dec(f0):
        @functools.wraps(f0)
        def wrapper(userName, loggedinUser):

            if userName == loggedinUser:
                 return "You are allowed to view this page"
            else:
                 return "Error"
        return wrapper
    return dec

@checkUser
def test2(userName, loggedinUser):
    return userName, loggedinUser

print test2()

我很确定它不起作用,这只是我的想法。我刚刚复制了这些代码并进行了编辑我真的很陌生。

1 个答案:

答案 0 :(得分:0)

对于您提供的代码,如果您只想检查用户,则无需使用装饰器,为什么不直接比较它们?既然你想使用装饰器检查权限。我想你可能想这样做:

import functools

def check_user(username, password):
    def dec(f):
        @functools.wraps(f)
        def wrapper(login_user, login_password):
            f(login_user, login_password)
            if username == login_user and password == login_password:
                 return "You are allowed to view this page"
            else:
                 return "Check your password and username"
        return wrapper
    return dec


@check_user('jhon', 'passwd')
def test2(login_user, login_password):
    print "hello, {0}".format(login_user)


print test2('jhon', 'foobar')
print test2('jhon', 'passwd')

,输出应为:

hello, jhon
Check your password and username
hello, jhon
You are allowed to view this page

你可以看到第一次输入错误的密码会给我们警告,但是当我们输入正确的信息时,它会向我们显示成功信息。