Tornado 概述

1 基本概念

像其他web框架一样, tornado也包括了以下内容:

基本构成:

	a 路由系统

	b 视图 

		获取请求数据
返回数据 c 模板语言
模板基本使用
自定义函数 利用组件自己完成 分页, 中间件等扩展功能

概念

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。

这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。

特点

Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接。

	对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。

开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem。)

2 简单应用

(1) 登录页面的小实例

	import tornado.ioloop
import tornado.web class LoginHandler(tornado.web.RequestHandler):
def get(self):
self.render('login.html') # 渲染template settings = {
'template_path':'templates',
'static_path':'static',
'static_url_prefix':'/stat/', # 静态文件 url
} # 配置模板文件路径 application = tornado.web.Application(
[(r"/login",LoginHandler),],**settings # 配置文件
) if __name__ == '__main__':
# 创建socket对象
application.listen(8001)
# conn,add = socket.accept()
tornado.ioloop.IOLoop.instance().start() # 1 执行脚本,监听 8000 端口 # 2 浏览器客户端访问 /index --> http://127.0.0.1:8000/index # 3 服务器接受请求,并交由对应的类处理该请求 # 4 类接受到请求之后,根据请求方式(post / get / delete ...)的不同调用并执行相应的方法 # 5 方法返回值的字符串内容发送浏览器

像Django中的

	{% load static from staticfiles %}
{% static 'main.css'% }

flask中

	{{url_for('static',filename='main.css')}}

tornado 也支持 静态文件的反向查找

	{{static_url('main.css')}}

(2) csrf 配置

settings = {
'xsrf_cookies':True
} {% raw xsrf_from_html() %} # 使用

(3) 请求数据

self.get_query_argument('page') # get params数据

self.get_body_argument('username') # post form数据

self.get_argument('username')
self.get_argument('page') # 所有数据都可以获取 def post(self):
usrname = self.get_argument('username')
pwd = self.get_argument('pwd')
print(usrname,pwd)
if usrname == 'root' and pwd == '123':
self.redirect('http://google.com')
return self.write('post')

(4) 模板语言

	self.render('login.html',**{'msg':'用户密码有误'})
self.render('index.html',user_list=user_list,user_dict=user_dict) python 语法: {{msg}} #注意: msg为空,在后端也得声明 msg = '' <ul>
{% for item in user_list %}
<li>{{item}}</li>
{% end %}
</ul>
{{ user_list[0] }} {{ user_dict['id'] }}
{{ user_dict.get('name') }}

(5) cookie设置

**普通cookie**

	self.set_cookie('user',username)
self.get_cookie('user') **加密cookie** 设置 settings = {
'cookie_secret':'salt'
} self.set_secure_cookie('user',username)
self.get_secure_cookie('user',username)

代码实例:

	import tornado.ioloop
import tornado.web class LoginHandler(tornado.web.RequestHandler):
def get(self):
self.render('login.html',msg='') # 渲染template def post(self):
username = self.get_argument('username')
pwd = self.get_argument('pwd')
if username == 'root' and pwd == '123':
self.set_cookie('user',username)
self.redirect('/index')
return self.render('login.html',**{'msg':'用户密码有误'}) class IndexHandler(tornado.web.RequestHandler):
def get(self): if self.get_cookie('user'):
user_list = [
'james','kobe'
] user_dict = {
'id':1,'name':'cp3'
}
self.render('index.html',user_list=user_list,user_dict=user_dict)
return # 直接 return 返回(推荐写法)
self.redirect('/login') settings = {
'template_path':'templates',
'static_path':'static',
'static_url_prefix':'/stat/', # 静态文件 url
# 'xsrf_cookies':True, # csrf } # 配置模板文件路径 application = tornado.web.Application([
(r"/login",LoginHandler),
(r"/index",IndexHandler), ],**settings # 配置文件
) if __name__ == '__main__':
# 创建socket对象
application.listen(8000)
# conn,add = socket.accept()
tornado.ioloop.IOLoop.instance().start()

(6) 通过tornado请求入口,在请求处理前,封装一些数据

class AuthHandler(tornado.web.RequestHandler):

	def initialize(self):
self.username = self.get_secure_cookie('user')
# 初始化的时候 def prepare(self):
pass
# 执行_excute 方法 class LoginHandler(AuthHandler): # @cookie_auth 判断self.username 是否有值
def get...
if self.username:(当然这里的判断 可以通过装饰来实现)
...

Tornado 概述的更多相关文章

  1. Python框架之Tornado(概述)

    本系列博文计划: 1.剖析基于Python的Web框架Tornado的源码,为何要阅读源码? Tornado 由前 google 员工开发,代码非常精练,实现也很轻巧,加上清晰的注释和丰富的 demo ...

  2. python web框架——初识tornado

    一 Tornado概述 Tornado是FriendFeed使用的可扩展的非阻塞式web框架及其相关工具的开源版本.这个Web框架看起来有些像web.py或者Google的 webapp,不过为了能有 ...

  3. 浅析tornado web框架

    tornado简介 1.tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和现在的主流 Web 服务器框架(包括大多数 Py ...

  4. tornado web框架

    tornado web框架 tornado简介 1.tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和现在的主流 Web ...

  5. 01: tornado基础篇

    目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...

  6. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  7. 国内某Python大神自创完整版,系统性学习Python

    很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...

  8. Tornado之架构概述图

    一.Tornado之架构概述图 二.Application类详细分析: #!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "S ...

  9. Tornado 模块概述

    Tornado模块分类 1. Core web framework tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application两个重要的类 t ...

随机推荐

  1. 从HighGUI的一段代码中看OpenCV打开视频的方式

      OpenCV的HighGUI提供了视频和摄像头的直接打开.那么它是如何实现的了?这里进行初步分析.     ;    switch(apiPreference) {    default:    ...

  2. 20145324 《Java程序设计》第6周学习总结

    20145324 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 1.使用输入串流将数据从来源取出 InputStream 使用输出串流将数据写入目的地 OutStream ...

  3. 八皇后问题解题报告(dfs

    这里是代码传送门 所谓八皇后问题,一开始接触,上学期舍友提及的,但是因为各种原因,水平不够,并没有关心,偶然之间,再次遇见,便进行的尝试(棋盘是0-7的,不是1-8的...开始打弄错了) 所谓八皇后问 ...

  4. Oh My Fish! 让你的 Shell 漂亮起来

    安装 Oh My Fish 安装 omf 很简单.你要做的只是在你的 Fish shell 中运行下面的命令. curl -L https://get.oh-my.fish | fish 一旦安装完成 ...

  5. windows使用Pandoc将Markdown转换为PDF文件

    pandoc下载:https://github.com/jgm/pandoc/releases/tag/1.19.2.1 //windows下载msi文件 miktex下载:https://mikte ...

  6. Hue的安装与部署

    Hue的安装与部署 hadoop hue Hue 简介 Hue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区,它是 ...

  7. .net 获取当前电脑账户

    string domainAndName = User.Identity.Name; ] { '\\' }, StringSplitOptions.RemoveEmptyEntries); strin ...

  8. CGI-FASTCGI-PHPFPM

    随意记录,摘自知乎 原文链接:https://segmentfault.com/q/1010000000256516 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式 ...

  9. 1.JSON 转换对象失败问题 2.spring注入失效

    今天做项目中将一个json 字符串转换为对象,但结果怎么都转换不了!——————最后发现问题,原来是因为这个类我给他添加了带参数的构造器!导致转换失败! 在添加一个无参的构造器就好了! 第二个:今天调 ...

  10. 最简js深浅拷贝说明

    1.浅拷贝 浅拷贝是拷贝引用,拷贝后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响.  浅拷贝分两种情况: 1.直接拷贝源对象的引用 2. 源对象拷贝实例,但其属性对象(类型为Object, ...