如何使用龙卷风网络服务器处理同一 class 中的多个路由
how to handle multiple routes in the same class with tornado web server
我正在用 tornado 编写一个非常简单的 Web 应用程序:
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 classes。
有没有办法用相同的 class 管理多条路线?
谢谢
是的,只需在您的路线规范中使用相同的 class:
routes = [
(r'/route1', MainHandler1),
(r'/route2', MainHandler1)
]
application = tornado.web.Application(routes, **settings)
编辑 "how will I differentiate route1 and route2 in MainHandler1":
我建议您不要将处理程序绑定到任何显式路由;而是尝试根据路线的可变部分对其进行参数化。如果我们以你原来的例子为例,你有两条路线,不同的是一个数字,并根据该数字提供不同的模板,你可能有这样的东西:
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)
通过这种方式,您可以定义一条路线,但实际上拥有与模板一样多的路线。另一方面,如果你需要对每条路由完全不同的响应,最好将它们放在不同的处理程序中。
我正在用 tornado 编写一个非常简单的 Web 应用程序:
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 classes。 有没有办法用相同的 class 管理多条路线?
谢谢
是的,只需在您的路线规范中使用相同的 class:
routes = [
(r'/route1', MainHandler1),
(r'/route2', MainHandler1)
]
application = tornado.web.Application(routes, **settings)
编辑 "how will I differentiate route1 and route2 in MainHandler1":
我建议您不要将处理程序绑定到任何显式路由;而是尝试根据路线的可变部分对其进行参数化。如果我们以你原来的例子为例,你有两条路线,不同的是一个数字,并根据该数字提供不同的模板,你可能有这样的东西:
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)
通过这种方式,您可以定义一条路线,但实际上拥有与模板一样多的路线。另一方面,如果你需要对每条路由完全不同的响应,最好将它们放在不同的处理程序中。