Python 理解装饰的困难

Python 理解装饰的困难,python,Python,我想在用户访问该方法之前检查他/她是否经过身份验证,因此我编写了一个名为authorize的decorator,但只执行decorator代码,即使用户经过身份验证,也不会在它之后调用该方法。 以下是方法和装饰器代码: @authorize def post(self, **kw): # store data in database after authentication done using @authorize def authorize(f): def wrapper

我想在用户访问该方法之前检查他/她是否经过身份验证,因此我编写了一个名为
authorize
的decorator,但只执行decorator代码,即使用户经过身份验证,也不会在它之后调用该方法。 以下是方法和装饰器代码:

@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
方法。顺便说一句,这是我第一次写decorator,所以我可能完全错了。感谢您的回答

您需要实际调用包装器中的函数

f(*args, **kwargs)

您需要实际调用包装器中的函数

f(*args, **kwargs)

你从来没有调用
f
inside
wrapper
,那么你期望什么时候发生呢?你从来没有调用
f
inside
wrapper
,那么你期望什么时候发生呢?哦,我还以为在调用方法之前会调用decorators呢。我不知道我必须自己调用这个方法。谢谢,如果您想插入新的arg或kwargs:
f(*args,overrided_-kwarg=val,**kwargs)
。(如果我们想要安全,即使在kwargs中已经存在Overrided_kwarg,我们也必须使用
kwargs['Overrided_kwarg']=newval
)哦,我以为在调用方法之前会调用装饰程序。我不知道我必须自己调用这个方法。谢谢,如果您想插入新的arg或kwargs:
f(*args,overrided_-kwarg=val,**kwargs)
。(如果我们想要安全,即使在kwargs中已经存在Overrided_kwarg,我们也必须使用
kwargs['Overrided_kwarg']=newval