Tornado 概述
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 概述的更多相关文章
- Python框架之Tornado(概述)
		本系列博文计划: 1.剖析基于Python的Web框架Tornado的源码,为何要阅读源码? Tornado 由前 google 员工开发,代码非常精练,实现也很轻巧,加上清晰的注释和丰富的 demo ... 
- python web框架——初识tornado
		一 Tornado概述 Tornado是FriendFeed使用的可扩展的非阻塞式web框架及其相关工具的开源版本.这个Web框架看起来有些像web.py或者Google的 webapp,不过为了能有 ... 
- 浅析tornado web框架
		tornado简介 1.tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和现在的主流 Web 服务器框架(包括大多数 Py ... 
- tornado web框架
		tornado web框架 tornado简介 1.tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和现在的主流 Web ... 
- 01: tornado基础篇
		目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ... 
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
		Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ... 
- 国内某Python大神自创完整版,系统性学习Python
		很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ... 
- Tornado之架构概述图
		一.Tornado之架构概述图 二.Application类详细分析: #!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "S ... 
- Tornado 模块概述
		Tornado模块分类 1. Core web framework tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application两个重要的类 t ... 
随机推荐
- 一道C++练习题,替换一个字符串里所有实例
			做了一道C++练习题,替换一个字符串里面的所有实例. #include <iostream> #include <string> using namespace std; co ... 
- 20145310《Java程序设计》第5次实验报告
			20145310<Java程序设计>第5次实验报告 实验要求 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验内容 根据所学内容,编写代码实现服务器与客户端 掌 ... 
- 20145327 《Java程序设计》第五周学习总结
			20145327 <Java程序设计>第五周学习总结 教材学习内容总结 try...catch:与C语言中程序流程和错误处理混在一起不同,Java中把正常流程放try块中,错误(异常)处理 ... 
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
			以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告 
- 【读书笔记】《深入浅出nodejs》第三章 异步I/O
			1. 为什么要异步I/O (1)用户体验上: 并发的优势: M+N+... -> max(M,N,...) --> 使后端能够快速的响应资源 *并发的劣势:... (2)资源分配: 单线 ... 
- Job流程:提交MR-Job过程
			1.一个标准 MR-Job 的执行入口: //参数 true 表示检查并打印 Job 和 Task 的运行状况 System.exit(job.waitForCompletion(true) ? 0 ... 
- TCP协议三次握手过程分析(改)
			TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ... 
- JS输出表格头上的文字内容
			Array.from(document.querySelectorAll("#tb1 tr .cell")).map(it=>it.innerText) 
- 防止xss(脚本攻击)的方法之过滤器
			一 什么是脚本注入 概念我就不说了 直接百度一份 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.比如这些代码包括HTML代码和客户端 ... 
- 在.Net中进行SQL Server数据库备份与还原操作实用类
			#region 类说明 //----------------------------------------------------------------------------- // // 项目 ... 
