首页 > 代码库 > Tornado Web 框架

Tornado Web 框架

一、简介

  Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化。

  Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这就意味着对于实时的 Web 服务来说,Tornado 是一个理想的 Web 框架。开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem。)

  请参见 Tornado 文档 或 Tornado 原文文档(镜像)以详细了解该 Web 框架。

下载和安装

pip安装pip3 install tornado 源码安装tar xvzf tornado-4.4.1.tar.gzcd tornado-4.4.1python setup.py buildsudo python setup.py install

源码下载:tornado-1.2.1.tar.gz、 tornado-4.4.1.tar.gz

Tornado 各主要模块web - FriendFeed 使用的基础 Web 框架,包含了 Tornado 的大多数重要的功能escape - XHTML, JSON, URL 的编码/解码方法database - 对 MySQLdb 的简单封装,使其更容易使用template - 基于 Python 的 web 模板系统httpclient - 非阻塞式 HTTP 客户端,它被设计用来和 web 及 httpserver 协同工作auth - 第三方认证的实现(包括 Google OpenID/OAuth、Facebook Platform、Yahoo BBAuth、FriendFeed OpenID/OAuth、Twitter OAuth)locale - 针对本地化和翻译的支持options - 命令行和配置文件解析工具,针对服务器环境做了优化底层模块httpserver - 服务于 web 模块的一个非常简单的 HTTP 服务器的实现iostream - 对非阻塞式的 socket 的简单封装,以方便常用读写操作ioloop - 核心的 I/O 循环

二、Hello, world

 "Hello, world" 及 Application settings 基本配置:

import tornado.ioloopimport tornado.web# import uimodules as md# import uimethods as mtclass MainHandler(tornado.web.RequestHandler):    def get(self):        self.write("Hello, world")settings = {    ‘template_path‘: ‘views‘,        # html文件    ‘static_path‘: ‘statics‘,        # 静态文件(css,js,img)    ‘static_url_prefix‘: ‘/statics/‘,# 静态文件前缀    ‘cookie_secret‘: ‘suoning‘,      # cookie自定义字符串加盐    # ‘xsrf_cookies‘: True,          # 防止跨站伪造    # ‘ui_methods‘: mt,              # 自定义UIMethod函数    # ‘ui_modules‘: md,              # 自定义UIModule类}application = tornado.web.Application([    (r"/", MainHandler),], **settings)if __name__ == "__main__":    application.listen(8888)    tornado.ioloop.IOLoop.instance().start()

 

1、处理程序和参数

  请求来时,程序会用正则匹配相应路由地址,并交付于 tornado.web.RequestHandler 的子类处理;子类会根据请求方式(post / get / delete ...)的不同调用并执行相应的方法,方法返回字符串内容并发送到浏览器。

self.write("<h1>Hello, World</h1>")    # html代码直接写在浏览器客户端self.render("index.html")  # 返回html文件,调用render_string(),内部其实是打开并读取文件,返回内容self.redirect("http://www.cnblogs.com/suoning",permanent=False) # 跳转重定向,参数代表是否永久重定向name = self.get_argument("name")       # 获取客户端传入的参数值name = self.get_arguments("name")      # 获取多个值,类别形式file = self.request.files["filename"]  # 获取客户端上传的文件raise tornado.web.HTTPError(403)       # 返回错误信息给客户端

 

Tornado Web 框架