Tornado使用派生自tornado.web.RequestHandler
的类来定义post
和get
方法。我已经为路径r/action/*
由于存在不同的更具体的路径,例如action/doThis
和action/requestThat
,我使用if-then-else结构构造get
方法,检查具体的请求URI。
这看起来非常笨拙,是否有更复杂的方法来构建,例如使用方法?或者Tornado方式是否只是定义更多的RequestHandlers?我喜欢bottle使用函数装饰器的方式,但由于它们是Python 3,所以目前这不是一个选项。
答案 0 :(得分:5)
装饰器不仅限于Python 3;我经常使用bottle
和2.7(在构建接口时我更喜欢装饰器语法和bottle
的较轻权重,或者当我发现我的实现不需要{{1}的基于类的行为时})。
也就是说,如果Tornado
和action/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
声明担忧。