Tornado 没有session,只有cookie_secret,这在一些情况下是不利于开发的。所有我们可以给Tornado加上session的功能。

这篇文章讲解的是依靠第三方包来实现。以后的文章我们还可以自己写一套。

以下为步骤:

1,安装包pycket

$ pip install pycket

2,使用时引入包

from pycket.session import SessionMixin

3,通过Handler传入(还可以创建一个BaseHandler,将其封装到BaseHandler也可以。这里为了简单,就不封装了)

4,在配置文件中进行配置

'''
Redis 配置
'''
# settings = {
# # cookie_secret必须设置
# 'cookie_secret': "2379874hsdhf0234990sdhsaiuofyasop977djdj",
# 'xsrf_cookies': True,
# 'debug': False,
# # 1 配置pycket 注意别忘记开启redis服务
# 'pycket': {
# 'engine': 'redis',
# 'storage': {
# 'host': 'localhost',
# 'port': 6379,
# 'db_sessions': 10,
# 'db_notifications': 11,
# 'max_connections': 2 ** 31,
# },
# 'cookies': {
# # 设置过期时间
# 'expires_days': 2,
# #'expires':None, #秒
# },
# }
# }
'''
Memcached 配置
'''
settings = {
'cookie_secret': "2379874hsdhf0234990sdhsaiuofyasop977djdj",
'pycket': {
'engine': 'memcached',
'storage': {
'servers': ('localhost:11211',)
},
'cookies': {
'expires_days': 120,
},
},
}

5,使用

    def get(self):
# 两种设置方式
self.session.set('foo', ['bar', 'baz'])
self.session['test'] = 'test!' # 两种获取方式
print self.session['test']
print self.session.get('foo')

完整代码:

 #--*--coding:utf-8--*--

 import tornado.web
import tornado.httpserver
import tornado.ioloop
import tornado.options
import os.path
from pycket.session import SessionMixin
from tornado.options import define, options
define("port", default=8001, help="run on the given port", type=int) class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler),
]
'''
Redis 配置
'''
# settings = {
# # cookie_secret必须设置
# 'cookie_secret': "2379874hsdhf0234990sdhsaiuofyasop977djdj",
# 'xsrf_cookies': True,
# 'debug': False,
# # 1 配置pycket 注意别忘记开启redis服务
# 'pycket': {
# 'engine': 'redis',
# 'storage': {
# 'host': 'localhost',
# 'port': 6379,
# 'db_sessions': 10,
# 'db_notifications': 11,
# 'max_connections': 2 ** 31,
# },
# 'cookies': {
# # 设置过期时间
# 'expires_days': 2,
# #'expires':None, #秒
# },
# }
# }
'''
Memcached 配置
'''
settings = {
'cookie_secret': "2379874hsdhf0234990sdhsaiuofyasop977djdj",
'pycket': {
'engine': 'memcached',
'storage': {
'servers': ('localhost:11211',)
},
'cookies': {
'expires_days': 120,
},
},
}
tornado.web.Application.__init__(self, handlers, **settings) class MainHandler(tornado.web.RequestHandler, SessionMixin):
def get(self):
# 两种设置方式
self.session.set('foo', ['bar', 'baz'])
self.session['test'] = 'test!' # 两种获取方式
print self.session['test']
print self.session.get('foo') if __name__ == "__main__":
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

注意:若使用Redis,确保你的Redis已经启动。若使用 Memcached ,请确保Memcached 已经启动

为Tornado框架加上基于Redis或Memcached的session 【第三方】的更多相关文章

  1. 基于redis实现tomcat的session会话保持 (转)

    出处:https://cloud.tencent.com/developer/article/1402997 基于redis实现tomcat的session会话保持 在实际生产中,我们经常部署应用服务 ...

  2. Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架

    Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...

  3. 万能分布式消费框架,添加基于redis中间件的方式。

    框架目的是分布式调度起一切任何函数(当然也包括调度起一切任何方法). 之前写的是基于rabbitmq的,作为专用的消息队列好处比redis的list结构好很多.但有的人还是强烈喜欢用redis,以及r ...

  4. 第二百六十四节,Tornado框架-基于正则的动态路由映射分页数据获取计算

    Tornado框架-基于正则的动态路由映射分页数据获取计算 分页基本显示数据 第一步.设置正则路由映射配置,(r"/index/(?P<page>\d*)", inde ...

  5. 第二百六十三节,Tornado框架-基于正则的动态路由映射

    Tornado框架-基于正则的动态路由映射 1.在路由映射条件里用正则匹配访问路径后缀2.给每一个正则匹配规则(?P<设置名称>)设置一个名称,3.在逻辑处理的get()方法或post() ...

  6. 基于redis的简易分布式爬虫框架

    代码地址如下:http://www.demodashi.com/demo/13338.html 开发环境 Python 3.6 Requests Redis 3.2.100 Pycharm(非必需,但 ...

  7. 从零到一手写基于Redis的分布式锁框架

    1.分布式锁缘由 学习编程初期,我们做的诸如教务系统.成绩管理系统大多是单机架构,单机架构在处理并发的问题上一般是依赖于JDK内置的并发编程类库,如synchronize关键字.Lock类等.随着业务 ...

  8. 基于redis的分布式锁的实现与框架解决方案

    利用切面实现redis分布式锁:https://www.cnblogs.com/xiaoxiongcanguan/p/10718202.html 细节分析redis实现分布式锁的前因后果:https: ...

  9. python运维开发(二十三)---tornado框架

    内容目录: 路由系统 模板引擎 cookie 加密cookie 自定义api 自定义session 自定义form表单验证 异步非阻塞 web聊天室实例 路由系统 路由系统其实就是 url 和 类 的 ...

随机推荐

  1. 使用zabbix监控mysql的三种方式

    使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...

  2. 安装旧版的docker-engine-1.12.6

    执行kubeadm init --api-advertise-addresses=172.16.160.211命令的时候,提示docker版本太新了 想要安装旧版docker,可以使用以下方法: yu ...

  3. Python进阶 - 命名空间与作用域

    Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空 ...

  4. Chapter 1. Introduce

    前言 本书全名是<H.264 and MPEG-4 Video Compression, Video Coding For Next-generation Multimedia>,作者为 ...

  5. c++ new delete 常踩的坑

    WeTest 导读 c++ 是公司开发最常用的语言之一, 那New和Delete 这两个函数是所有开发者即爱又恨的函数.由new 和delete引发的bug , coredump , 让多少程序员加了 ...

  6. js模块化/js模块加载器/js模块打包器

    之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7 ...

  7. Java系列 - 用Java8新特性进行Java开发太爽了

    本人博客文章网址:https://www.peretang.com/using-java8s-new-features-to-coding-is-awesome/ 前言 从开始写博客到现在已经过去3个 ...

  8. 京东JOS API 接入使用笔记

    商户开设了京东店.淘宝店,最近打算使用京东物流,需要使用京东仓库(京东店的订单使用京仓发货,淘宝等其他店使用京东云仓)发货,所以得从自家的ERP与京东沧海(ECLP)API对接,实现收发存. 首先得在 ...

  9. jfinal框架新手使用之路及开发心得

    从接触jfinal这个框架到现在差不多也有一个的时间了,因为之前接触的都是像spring ,springMVC,mybatis,struts2,hibernate这种传统,大多数公司都在用的这种框架. ...

  10. java核心机制

    Java中有两种核心机制:Java虚拟机(Java Virtual Machine).垃圾收集机制(Garbage collection) 一.核心机制之Java虚拟机 ① Java虚拟机可以理解成一 ...