Tornado是一个轻量级完整的web框架,在Linux系统下它会使用epoll,是一个异步非阻塞的web服务器框架,对于实时应用来说很理想,想想同是异步非阻塞的nginx的残暴程度就知道了

1.路由系统

 application = tornado.web.Application([
(r'/login', LoginHandler),
(r'/index', IndexHandler),    每个url是由一个类处理的
], **settings) class IndexHandler(SessionHandler, tornado.web.RequestHandler):
def get(self):
current_user = self.session['username']
if current_user:
self.write(current_user)
else:
self.write('喵喵喵喵?')
 application = tornado.web.Application([
(r'/login', LoginHandler),
(r'/index', IndexHandler), # 处理www.bfmq.com/index
], **settings) # 二级域名
application.add_handlers('cmdb.bfmq.com', [
(r'/main', CmdbHandler),
(r'/main', MainHandler),
(r'/index', IndexHandler), # 处理cmdb.bfmq.com/index
])

2.模版引擎

与django类似,支持母板,导入,{{  }},{%  %}

 settings = {
'template_path': 'views', # 存放html模版的路径
'ui_methods': methods, # UIMethod的py文件
'ui_modules': modules, # UIModule的py文件
} class MainHandler(SessionHandler, tornado.web.RequestHandler):
def get(self):
self.render('main.html', li=[11, 22, 33, 44])
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>main</h1>
{{ miao(1) }}
{% for i in range(len(li)) %}
<p>{{ i }} --- {{ li[i] }}</p>
{% end %}
</body>
</html>
 def miao(self, a):
return '喵喵喵喵'

3.配置文件

 settings = {
'template_path': 'views', # 存放html模版的路径
'ui_methods': methods, # UIMethod的py文件
'ui_modules': modules, # UIModule的py文件
'static_path': 'statics', # 静态文件存放路径
'static_url_prefix': '/statics/', # 静态文件访问url
}

4.cookie及加密

 class IndexHandler(tornado.web.RequestHandler):
def get(self):
if not self.get_cookie("mycookie"): # 获取cookie
self.set_cookie("mycookie", "myvalue") # 设置cookie
self.write("喵喵喵喵?")
else:
self.write("喵~") class IndexHandler(tornado.web.RequestHandler):
def get(self):
if not self.get_secure_cookie("mycookie"): # 获取加密cookie
self.set_secure_cookie("mycookie", "myvalue") # 设置加密cookie
self.write("喵喵喵喵?")
else:
self.write("喵~") application = tornado.web.Application([
(r"/index", IndexHandler),
], cookie_secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") # 对此应用时提供一个密钥

5.异步非阻塞

使用装饰器 + Future实现

 class AsyncHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self):
future = Future()
future.add_done_callback(self.doing)
yield future
# 或
# tornado.ioloop.IOLoop.current().add_future(future,self.doing)
# yield future def doing(self, *args, **kwargs):
self.write('async')
self.finish()

python第二十三天-----Tornado的更多相关文章

  1. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

  2. 小甲鱼Python第二十三讲课后习题--025,字典

    笔记: 1.字典是Python中唯一的映射类型 2.字典包含两个要素:键(key)和值(value)他们是成对出现的,用大括号括起来,多对存在时用逗号隔开. 3.可以用dict()直接创建字典,如di ...

  3. python第二十三天-----作业中

    #!usr/bin/env python #-*-coding:utf-8-*- # Author calmyan import os ,sys,time from core import trans ...

  4. python第二十三课——dict中的函数

    dic1 = {...} dic2 = {...} dic1.update(dic2) 1.update(dict):dic1调用update传入dic2,如果dic2中的内容在dic1中不存在,那么 ...

  5. Python开发【第二十三篇】:持续更新中...

    Python开发[第二十三篇]:持续更新中...

  6. python web框架之Tornado

    说Tornado之前分享几个前端不错的网站: -- Bootstrap http://www.bootcss.com/ -- Font Awesome http://fontawesome.io/ - ...

  7. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

  8. Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助 目录 Pychar ...

  9. Python(九)Tornado web 框架

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

随机推荐

  1. No input clusters found in output/ZS_TEST_OUTPUT3404268420/clusters-0/part-randomSeed. Check your -c argument.

    错误原因可能为: -i 后面参数路径对应的目录或文件中的数据为空,即输入集为空,所以找不到cluster

  2. 生产环境中,通过域名映射ip切换工具SwitchHosts

    项目中,经常需要配置host.将某个域名指向某个ip.手动配置C:\Windows\System32\drivers\etc\hosts,非常不方便.这里分享一个可以高效切换host工具:Switch ...

  3. Linux01

    Linux的特点 1.免费的/开源 2.支持多线程./多用户的(这是操作系统性能的重要指标) 3.安全性好 4.对内存和文件管理优越. 1999年,IBM宣布与Redhat公司建立伙伴关系. Linu ...

  4. 使用java代码打开特定网页

    第一种方法的代码如下所示: import java.io.File; public class Test04 { public static void main(String[] args) { // ...

  5. Android在layout xml中使用include完成静态加载

    Android在layout xml中使用include完成静态加载 include静态加载:不仅可以加载布局,还可以加载控件(控件标签名要在最外层)include标签中有个layout属性就是专门用 ...

  6. redis.h

    [对象] typedef struct redisObject {     unsigned type:4;[REDIS_STRING,REDIS_LIST, HASH, SET, ZSET]     ...

  7. 19条ANDROID平台设计规范平台设计规范

    1.尺寸以及分辨率: Android的界面尺寸比较流行的有:480*800.720*1280.1080*1920,我们在做设计图的 时候建议是以 480*800的尺寸为标准: 2.界面基本组成元素: ...

  8. 代码题 — 剑指offer题目、新增题目

     1.剪绳子 给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]*k[1]*...*k[m] ...

  9. linux设置开机自动进入命令模式

    1)打开终端,输入命令:      su – root     2)输入密码 3)再输入如下命令进入到命令行模式:      init 3 4)修改启动模式为永久命令行模式:      vi /etc ...

  10. 1001 字符串“水”题(二进制,map,哈希)

    1001: 字符串“水”题 时间限制: 1 Sec  内存限制: 128 MB提交: 210  解决: 39[提交][状态][讨论版] 题目描述 给出一个长度为 n 的字符串(1<=n<= ...