Skip to main content
 首页 » 编程设计

python之结构 RESTful Tornado Web 应用程序

2025年05月04日38yyy_WW

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) 
])