麻烦理解装饰

时间:2016-10-23 11:53:18

标签: python

我想在他/她可以访问该方法之前检查用户是否已经过身份验证,因此我编写了一个名为authorize的装饰器,但只执行了装饰器代码,即使用户已通过身份验证,方法也是没跟它打电话。 这是方法和装饰器代码:

@authorize
def post(self, **kw):
    # store data in database after authentication done using @authorize


def authorize(f):
    def wrapper(*args, **kwargs):
        secret_key = config.get('auth_secret_key')
        auth_message = config.get('auth_message')
        if 'HTTP_TOKEN' not in request.environ:
            abort(401, detail='Authentication failed', passthrough='json')
        gibberish = request.environ['HTTP_TOKEN']
        if triple_des(secret_key).decrypt(gibberish, padmode=2).decode() != auth_message:
            abort(401, detail='Authentication failed', passthrough='json')
    return wrapper

如果用户遇到身份验证问题,则会引发401并中止请求,但如果他已通过身份验证,则不会调用post方法。顺便说一句,这是我第一次写装饰,所以我可能完全错了。谢谢你的回答

1 个答案:

答案 0 :(得分:1)

您需要在包装器中实际调用该函数。

f(*args, **kwargs)