阿小信大人的头像
做你说过的,说你能做的 阿小信大人

flask视图函数的装饰器必须用到wraps2015-09-11 17:38

之前遇到一个一直没意识到得问题。为flask的视图添加装饰器需要注意的一点是必须使用wraps。

wraps的作用之一是改变函数的__name__

如果你的装饰器不用wraps,那么使用装饰器后原本不同两个函数的名字都变成了相同的名字。在flask的视图中这样会造成函数名冲突,提示

AssertionError: View function mapping is overwriting an existing endpoint function

所以装饰器应该写成

def login_required(func):

    @wraps(func)
    def wrap(*args, **kwargs):
        courier_id = request.headers.get('X-ID')
        token = request.headers.get('X-TOKEN')
        if verify_login_token(int(courier_id), token):
            return func(*args, **kwargs)
        else:
            return response(ResponseCode.UNAUTHORIZED)

    return wrap

如果不加wraps那么视图函数被装饰后函数名都变成了wrap,在routeing的时候就会因为名字重复而报错

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#   #flask
分享到:
阅读[1189] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

发表评论