构建RESTful Tornado Web App

Mah*_*oni 1 python design-patterns tornado

Tornado使用派生自tornado.web.RequestHandler定义postget方法的类.我已经为路径创建了一个请求处理程序r/action/*

由于存在不同的更具体的路径,action/doThis因此action/requestThatget使用if-then-else结构检查具体请求URI.

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

Mat*_*aum 5

装饰器不仅限于Python 3; 我bottle经常使用2.7(我更喜欢装饰器语法和bottle原型接口时较轻的重量,或者当我没有发现我的实现需要基于类的行为时Tornado).

也就是说,如果action/doThisaction/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)
])
Run Code Online (Sandbox Code Playgroud)