构建RESTful Tornado Web App

时间:2012-12-26 19:26:33

标签: python design-patterns tornado

Tornado使用派生自tornado.web.RequestHandler的类来定义postget方法。我已经为路径r/action/*

创建了一个请求处理程序

由于存在不同的更具体的路径,例如action/doThisaction/requestThat,我使用if-then-else结构构造get方法,检查具体的请求URI。

这看起来非常笨拙,是否有更复杂的方法来构建,例如使用方法?或者Tornado方式是否只是定义更多的RequestHandlers?我喜欢bottle使用函数装饰器的方式,但由于它们是Python 3,所以目前这不是一个选项。

2 个答案:

答案 0 :(得分:5)

装饰器不仅限于Python 3;我经常使用bottle和2.7(在构建接口时我更喜欢装饰器语法和bottle的较轻权重,或者当我发现我的实现不需要{{1}的基于类的行为时})。

也就是说,如果Tornadoaction/doThis提供不同的行为,那么将它们定义为单独的路线会更好吗?如果他们分享他们行为的某些方面,您可以始终让两个action/requestThat子类共享一个共同基础。

RequestHandler

答案 1 :(得分:1)

Similar Question和我同意的第一个答案。由于缺乏Tornado提供的功能,您必须推出自己的解决方案或使用像Tornado Addons这样的主题,这样可以减轻创建必要处理程序及其相关路径的烦恼。

from tornado_addons.route import route

@route( "/action/doThis" )
class HandleDoThis( Request ):
 pass

@route( "/action/requestThat" )
class HandleRequestThat:
 pass

app = tornado.web.Application( route.get_routes() )

这样可以为每个RESTful资源创建单独的处理程序类。这将清除您的if声明担忧。