Tornado 中的 RequestHandler 类和 Application 类是构建 Web 应用的两个核心组件。

RequestHandler 类

RequestHandler 是 Tornado 中用于处理 HTTP 请求的基类。你可以创建自己的处理类,继承于 RequestHandler,然后重写其中的方法来处理不同的 HTTP 请求。以下是一些常用的 RequestHandler 方法:

  •  initialize(self, *args, **kwargs): 在处理请求之前进行初始化操作,可以通过这个方法传递参数给处理器。


  •  get(self, *args, **kwargs): 处理 HTTP GET 请求的方法。


  •  post(self, *args, **kwargs): 处理 HTTP POST 请求的方法。


  •  write(self, chunk): 向响应中写入内容。


  •  finish(self, chunk=None): 结束响应的写入。


  •  redirect(self, url, permanent=False, status=None): 重定向到指定的 URL。


  •  set_status(self, status_code, reason=None): 设置 HTTP 状态码。


  •  set_header(self, name, value): 设置响应头。


  •  get_argument(self, name, default=None, strip=True): 获取请求参数。


  •  get_cookie(self, name, default=None): 获取 cookie 值。


  •  set_cookie(self, name, value, domain=None, expires=None, path="/", expires_days=None, **kwargs): 设置 cookie。


这些方法提供了处理请求和生成响应的基本工具。你可以根据自己的需求重写这些方法,定制化你的请求处理逻辑。

Application 类

Application 类是 Tornado Web 应用的核心,它负责将请求路由到相应的 RequestHandler 处理器。以下是一些常用的 Application 类的方法和属性:

  •  Application(handlers=None, default_host="", transforms=None, **settings): 创建一个应用实例。


  •  add_handlers(self, host, handlers): 向应用中添加新的请求处理器。


  •  listen(self, port, address="", **kwargs): 监听指定的端口和地址。


  •  add_transform(self, transform): 向应用中添加一个变换器,用于修改请求或响应。


  •  settings: 一个字典,包含应用的配置项,例如模板路径、静态文件路径等。


  •  ui_modules 和 ui_methods: 用于注册 UI 模块和 UI 方法的属性。


  •  loader: 用于加载模板的对象。


通过配置 Application 对象,你可以定义应用的路由、设置以及其他参数。例如:
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, Tornado!")

def make_app():
    return tornado.web.Application([
        (r'/', MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    print("Server is running at http://localhost:8888")
    tornado.ioloop.IOLoop.current().start()

在这个例子中,通过 make_app 函数创建了一个简单的应用,指定了根路径的处理器为 MainHandler。应用通过 app.listen(8888) 开启了监听端口为 8888 的服务。

总的来说,RequestHandler 处理具体的请求逻辑,而 Application 则负责管理整个应用的配置和路由。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7424/Tornado