如何使用龙卷风Web服务器处理同一类中的多个路由

时间:2017-03-12 10:05:52

标签: tornado

我正在编写一个非常简单的龙卷风网络应用程序:

class MainHandler1(tornado.web.RequestHandler):
  def get(self):
     self.render("page1.html")

class MainHandler2(tornado.web.RequestHandler):
  def get(self):
     self.render("page2.html")
...

application = tornado.web.Application([(r'/route1', MainHandler1), (r'/route2', MainHandler2)], **settings)

如你所见,我有2条路线,我需要为这些路线创建2个类。 有没有办法管理具有相同类的多个路由?

由于

1 个答案:

答案 0 :(得分:1)

是的,只需在路线规范中使用相同的类:

routes = [
    (r'/route1', MainHandler1),
    (r'/route2', MainHandler1)
]
application = tornado.web.Application(routes, **settings)

编辑重新"我将如何区分MainHandler1"中的route1和route2:

我建议你不要将你的处理程序绑定到任何显式路由;而是尝试根据路线的可变部分对其进行参数化。如果我们采用您的原始示例,您有两条不同的路线,并根据该数字提供不同的模板,您可能会遇到类似的情况:

class MainHandler(tornado.web.RequestHandler):
    def get(self, page_num):
        self.render("page{}.html".format(page_num))

routes = [
    (r'/route(\d+)', MainHandler),
]
application = tornado.web.Application(routes, **settings)

通过这种方式,您可以定义一条路线,但实际上可以拥有尽可能多的模板。另一方面,如果您对每条路线需要完全不同的响应,那么将它们保存在单独的处理程序中要好得多。