Tornado 和主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。
下面是经典的 Hello World 实例,非常的简单和容易理解:
Tornado 的 Web 程序会将 URL 或者 URL 范式映射到 tornado.web.RequestHandler
的子类上去。在其子类中定义了 get()
或 post()
方法,用以处理不同的 HTTP 请求。
get_argument()
方法来获取查询字符串参数,以及解析 POST
的内容:
上传的文件可以通过 self.request.files
访问到,该对象将名称(HTML元素 <input type="file">
的 name 属性)对应到一个文件列表。每一个文件都以字典的形式 存在,其格式为 {"filename":..., "content_type":..., "body":...}
。
如果你想要返回一个错误信息给客户端,例如“403 unauthorized”,只需要抛出一个 tornado.web.HTTPError
异常:
请求处理程序可以通过 self.request
访问到代表当前请求的对象。该 HTTPRequest
对象包含了一些有用的属性,包括:
-
arguments
- 所有的GET
或POST
的参数 -
files
- 所有通过multipart/form-data
POST 请求上传的文件 -
path
- 请求的路径(?
之前的所有内容) -
headers
- 请求的开头信息
你可以通过查看源代码 httpserver
模组中 HTTPRequest
的定义,从而了解到它的 所有属性。
,