在web.py的Controller方法中使用装饰器,web.pycontroller,import webur


import weburls = (    '/', 'hello',)app = web.application(urls, globals())def hold(func):    print 'run hlod'    def f(self):        print 'in hold func'        return 'hold'    return fclass hello:    @hold    def GET(self):        print 'in hello'        return 'hello'if __name__ == "__main__":    app.run()

现在的问题是,hold会在什么时候调用?

过去我一直以为是每次调用GET函数的时候会调用一遍hold函数,但事实并不是这样的,事实是,当定义GET函数加载的时候,就会调用一遍hold函数,而且仅仅调用一遍hold,这时候hold返回的函数就会替代原始的GET函数定义,所以运行这点python代码,输出结果如下

http://0.0.0.0:8080/run hlodin hold func10.0.2.2:51602 - - [23/Sep/2011 08:04:11] "HTTP/1.1 GET /" - 200 OK10.0.2.2:51602 - - [23/Sep/2011 08:04:11] "HTTP/1.1 GET /favicon.ico" - 404 Not Foundin hold func10.0.2.2:51602 - - [23/Sep/2011 08:04:12] "HTTP/1.1 GET /" - 200 OK

评论关闭