2013-12-22 33 views
0

我想在一个类中设置多个获取路线。或者简单地将路线映射到功能。如何将路线映射到Tornado中的函数?

这是我做了什么:

class TestRoute1(tornado.web.RequestHandler): 
    def get(self): 
     self.write("I have done something.") 

class TestRoute2(tornado.web.RequestHandler): 
    def get(self): 
     self.write("This is something else.") 

application = tornado.web.Application([ 
    (r"/test1", TestRoute1), 
    (r"/test2", TestRoute2), 
]) 
application.listen(8080) 

这是我认为应该可以做到:

class TestRoute(tornado.web.RequestHandler): 
    def func1(self): 
     self.write("I have done something.") 

    def func2(self): 
     self.write("This is something else.") 

application = tornado.web.Application([ 
    (r"/test1", TestRoute.func1), 
    (r"/test2", TestRoute.func2), 
]) 
application.listen(8080) 

或像这样的东西。可能吗?如果不是,我使用的替代品有哪些?

回答

2

通常,在Tornado中这样做的惯用方式是使用两个独立的类,就像您在第一个示例中所做的那样,并使用通用基类来包含需要在它们之间共享的任何代码。

但是,有两种方法可将附加信息从路由表传递到处理程序。首先,如果路由正则表达式中有捕获组,则它们捕获的子串将传递给get/post/etc方法。其次,您可以在路由表中传递额外的字典(作为元组的第三个元素);这个字典将成为处理程序的initialize()方法的关键字参数。

-1

这是针对龙卷风创作者的原意,但您可以使用函数装饰器来路由请求。

基本上,您可以使用使用装饰器来创建内部类,并使用setattr()来替换您自己的get方法。

看看提供Tornado功能路由器的this article I wrote

相关问题