发布于 2012-12-26 11:39:50
装饰器不限于Python3;我经常使用bottle
和2.7 (当我发现我的实现不需要基于类的Tornado
行为时,我更喜欢装饰器的语法和bottle
的更轻的重量。)
也就是说,如果action/doThis
和action/requestThat
提供了不同的行为,那么将它们定义为不同的路由会更好吗?如果它们共享行为的某些方面,则始终可以让两个RequestHandler
子类共享一个公共基础。
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)
])
发布于 2012-12-26 12:21:37
相似问题和我同意的第一个答案。由于“旋风”缺乏所提供的功能,所以您必须使用自己的解决方案,或者使用像龙卷风加载物这样的催眠功能,这将减轻创建必要的处理程序及其相关路由的麻烦。
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
语句的担忧。
https://stackoverflow.com/questions/14045236
复制相似问题