tornado中文文档
更新时间:2023-09-30 09:15:01 阅读量: 综合文库 文档下载
概览
? ? ?
?
? ? ? ?
Overview 下载和安装 模块索引
o 主要模块 o 底层模块 Tornado 攻略
o 请求处理程序和请求参数
o 重写 RequestHandler 的方法函数 o 重定向(redirect) o 模板
o Cookie 和安全 Cookie o 用户认证
o 跨站伪造请求的防范
o 静态文件和主动式文件缓存 o 本地化 o UI 模块
o 非阻塞式异步请求 o 异步 HTTP 客户端 o 第三方认证
o 调试模式和自动重载 性能
生产环境下的部署
WSGI 和 Google AppEngine 注意事项和社区支持
Overview
FriendFeed使用了一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器。其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 webapp, 不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。
Tornado 就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都
会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 The C10K problem ) 以下是经典的 “Hello, world” 示例:
import tornado.ioloop import tornado.web
class MainHandler(tornado.web.RequestHandler): def get(self):
self.write(\
application = tornado.web.Application([ (r\])
if __name__ == \ application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
查看下面的 Tornado 攻略以了解更多关于 tornado.web 包 的细节。
我们清理了 Tornado 的基础代码,减少了各模块之间的相互依存关系,所以理论上讲, 你可以在自己的项目中独立地使用任何模块,而不需要使用整个包。
下载和安装
自动安装: Tornado 已经列入 PyPI ,因此可以通过 pip 或者 easy_install 来安装。如果你没有安装 libcurl 的话,你需要将其单独安装到系统中。请参见下面的安装依赖一节。注意一点,使用 pip 或 easy_install 安装的 Tornado 并没有包含源代码中的 demo 程序。 手动安装: 下载 tornado-1.2.1.tar.gz tar xvzf tornado-1.2.1.tar.gz cd tornado-1.2.1
python setup.py build
sudo python setup.py install
Tornado 的代码托管在 GitHub 上面。对于 Python 2.6 以上的版本,因为标准库中已经包括了对 epoll 的支持,所以你可以不用 setup.py 编译安装,只要简单地将 tornado 的目录添加到 PYTHONPATH 就可以使用了。
安装需求
Tornado 在 Python 2.5, 2.6, 2.7 中都经过了测试。要使用 Tornado 的所有功能,你需要安装 PycURL (7.18.2 或更高版本) 以及 simplejson (仅适用于Python 2.5,2.6 以后的版本标准库当中已经包含了对 JSON 的支持)。为方便起见,下面将列出 Mac OS X 和 Ubuntu 中的完整安装方式: Mac OS X 10.6 (Python 2.6+) sudo easy_install setuptools pycurl Ubuntu Linux (Python 2.6+) sudo apt-get install python-pycurl Ubuntu Linux (Python 2.5)
sudo apt-get install python-dev python-pycurl python-simplejson
模块索引
最重要的一个模块是web, 它就是包含了 Tornado 的大部分主要功能的 Web 框架。其它的模块都是工具性质的, 以便让 web 模块更加有用 后面的 Tornado 攻略 详细讲解了 web 模块的使用方法。
主要模块
? ? ? ? ? ? ? ?
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 循环
?
Tornado 攻略
请求处理程序和请求参数
Tornado 的 Web 程序会将 URL 或者 URL 范式映射到 tornado.web.RequestHandler 的子类上去。在其子类中定义了 get() 或 post() 方法,用以处理不同的 HTTP 请求。
下面的代码将 URL 根目录 / 映射到 MainHandler,还将一个 URL 范式
/story/([0-9]+) 映射到 StoryHandler。正则表达式匹配的分组会作为参数引入 的相应方法中:
class MainHandler(tornado.web.RequestHandler): def get(self):
self.write(\
class StoryHandler(tornado.web.RequestHandler): def get(self, story_id):
self.write(\
application = tornado.web.Application([ (r\
(r\])
你可以使用 get_argument() 方法来获取查询字符串参数,以及解析 POST 的内容:
class MainHandler(tornado.web.RequestHandler): def get(self):
self.write('
')def post(self):
self.set_header(\
self.write(\上传的文件可以通过 self.request.files 访问到,该对象将名称(HTML元素
如果你想要返回一个错误信息给客户端,例如“403 unauthorized”,只需要抛出一个 tornado.web.HTTPError 异常: if not self.user_is_logged_in(): raise tornado.web.HTTPError(403)
请求处理程序可以通过 self.request 访问到代表当前请求的对象。该 HTTPRequest 对象包含了一些有用的属性,包括:
arguments - 所有的 GET 或 POST 的参数
? files - 所有通过 multipart/form-data POST 请求上传的文件 ? path - 请求的路径( ? 之前的所有内容) ? headers - 请求的开头信息
?
你可以通过查看源代码 httpserver 模组中 HTTPRequest 的定义,从而了解到它的 所有属性。
重写 RequestHandler 的方法函数
除了 get()/post()等以外,RequestHandler 中的一些别的方法函数,这都是 一些空函数,它们存在的目的是在必要时在子类中重新定义其内容。对于一个请求的处理 的代码调用次序如下:
1. 程序为每一个请求创建一个 RequestHandler 对象
2. 程序调用 initialize() 函数,这个函数的参数是 Application 配置中的关键字 参数定义。(initialize 方法是 Tornado 1.1 中新添加的,旧版本中你需要 重写 __init__ 以达到同样的目的) initialize 方法一般只是把传入的参数存 到成员变量中,而不会产生一些输出或者调用像 send_error 之类的方法。 3. 程序调用 prepare()。无论使用了哪种 HTTP 方法,prepare 都会被调用到,因此 这个方法通常会被定义在一个基类中,然后在子类中重用。prepare可以产生输出 信息。如果它调用了finish(或send_error` 等函数),那么整个处理流程 就此结束。 4. 程序调用某个 HTTP 方法:例如 get()、post()、put() 等。如果 URL 的正则表达式模式中有分组匹配,那么相关匹配会作为参数传入方法。 下面是一个示范 initialize() 方法的例子: class ProfileHandler(RequestHandler): def initialize(self, database): self.database = database
def get(self, username): ...
正在阅读:
tornado中文文档09-30
CAN设计流程中使用的VECTOR工具05-06
教师资格证考试中学语文说课教案:黄河颂05-11
电商代运营合同5962104-08
《冲压模具》期终试07-29
《经济法》课程学习要点03-18
扬州市建筑系统中级职称复习题(答案)10-03
食品安全风险监测竞赛考试题库05-07
建筑空间构成教学大纲05-31
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 中文
- tornado
- 文档
- 拓展模块综合考试题2
- 我国公开市场业务发展路径探索
- 2015年五四青年节素质拓展训练活动方案
- 创新作文写作教学研究与实验课题组简报(8)
- 机械加工工艺设计与实践习题集Open老师
- 创建平安校园总结
- 天然药物化学复习思考题
- 人类自醒的起源――从西方文学史上的四座里程碑谈起-2019年文档
- 单位家属院房屋买卖合同模版
- 六年级上册1.4 素数、合数与分解素因数
- image J软件分析western blot灰度值
- 开县职业教育中心教学设计模板
- 广州市七年级英语教学通讯 - 图文
- 中日旅行社比较
- 河北省安平县八年级语文上册7《背影》群文阅读教学设计(新版)新人教版
- EN12266-1-2003英国标准中文
- 管理学第二次作业
- 手指口述及辩识卡 - 图文
- 播音主持试题模拟口试+笔试模拟题 doc
- 华为奖惩规定摘要