Tornado使用派生自 tornado.web.RequestHandler 的类来定义 post 和 get 方法。我已经为路径 r/action/*
因为有不同的更具体的路径,比如 action/doThis 和 action/requestThat 我用 if- 构造了 get 方法then-else 结构检查具体请求 URI。
这看起来很笨拙,是否有更复杂的方法来构造它,例如使用方法?或者 Tornado 的方法是只定义更多的 RequestHandlers 吗?我喜欢这种方式bottle使用函数装饰器来实现,但由于它们是 Python 3,目前这不是一个选项。
请您参考如下方法:
装饰器不限于 Python 3;我经常将 bottle 与 2.7 一起使用(在制作接口(interface)原型(prototype)时,或者当我发现我的实现不需要基于类的Tornado 的行为)。
也就是说,如果 action/doThis 和 action/requestThat 提供不同的行为,将它们定义为单独的路由是否会更好?如果它们共享它们行为的某些方面,您总是可以让两个 RequestHandler 子类共享一个公共(public)基础。
class HandleAction(tornado.web.RequestHandler):
def take_appropriate_action(route):
print("Responding to action/{}".format(route))
class HandleThis(HandleAction):
def get(self):
self.take_appropriate_action('doThis')
class HandleThat(HandleAction):
def get(self):
self.take_appropriate_action('requestThat')
app = tornado.web.Application([
(r'/action/doThis', HandleThis),
(r'/action/requestThat', HandleThat)
])
