我用 flask 框架做一个网站的过程中,要用到装饰器,缩减版代码如下:
def testwra(func):
print "testwra"
def _wrapper():
print "wra"
r = func()
return r
print "end"
return _wrapper
@testwra
@app.route('/users', methods=['GET'])
def get_users():
return ['33', '44']
这里,正常的执行顺序不应该是 testwra->先后打印 testwra 和 end->调用_wrapper->打印 wra->调用 func()函数->返回 list->返回 r,但是我这里在浏览器中输入 url ( http://localhost:5000/users ),却不会打印 wra,好像是没有进入_wrapper 函数中。
而且还会报错 TypeError: 'list' object is not callable
list 不是可以作为返回值的吗?
你看看app.route返回什么?
<p>你应该用functools.wraps装饰一下你的testwra,并把@testwra和@app.ruote顺序调整一下:</p>
import functools
def testwra(func):
print "testwra"
@functools.wraps(func)
def _wrapper():
print "wra"
r = func()
return r
print "end"
return _wrapper
@app.route('/users', methods=['GET'])
@testwra
def get_users():
return ['33', '44']
感谢,确实是装饰器调用顺序的问题,调整后就正常了~
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。