为Tornado框架加上基于Redis或Memcached的session 【第三方】
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 【第三方】的更多相关文章
- 基于redis实现tomcat的session会话保持 (转)
出处:https://cloud.tencent.com/developer/article/1402997 基于redis实现tomcat的session会话保持 在实际生产中,我们经常部署应用服务 ...
- Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...
- 万能分布式消费框架,添加基于redis中间件的方式。
框架目的是分布式调度起一切任何函数(当然也包括调度起一切任何方法). 之前写的是基于rabbitmq的,作为专用的消息队列好处比redis的list结构好很多.但有的人还是强烈喜欢用redis,以及r ...
- 第二百六十四节,Tornado框架-基于正则的动态路由映射分页数据获取计算
Tornado框架-基于正则的动态路由映射分页数据获取计算 分页基本显示数据 第一步.设置正则路由映射配置,(r"/index/(?P<page>\d*)", inde ...
- 第二百六十三节,Tornado框架-基于正则的动态路由映射
Tornado框架-基于正则的动态路由映射 1.在路由映射条件里用正则匹配访问路径后缀2.给每一个正则匹配规则(?P<设置名称>)设置一个名称,3.在逻辑处理的get()方法或post() ...
- 基于redis的简易分布式爬虫框架
代码地址如下:http://www.demodashi.com/demo/13338.html 开发环境 Python 3.6 Requests Redis 3.2.100 Pycharm(非必需,但 ...
- 从零到一手写基于Redis的分布式锁框架
1.分布式锁缘由 学习编程初期,我们做的诸如教务系统.成绩管理系统大多是单机架构,单机架构在处理并发的问题上一般是依赖于JDK内置的并发编程类库,如synchronize关键字.Lock类等.随着业务 ...
- 基于redis的分布式锁的实现与框架解决方案
利用切面实现redis分布式锁:https://www.cnblogs.com/xiaoxiongcanguan/p/10718202.html 细节分析redis实现分布式锁的前因后果:https: ...
- python运维开发(二十三)---tornado框架
内容目录: 路由系统 模板引擎 cookie 加密cookie 自定义api 自定义session 自定义form表单验证 异步非阻塞 web聊天室实例 路由系统 路由系统其实就是 url 和 类 的 ...
随机推荐
- (6)javascript的程序控制结构及语句-----(1)条件判断
程序控制结构及语句 编程就是将现实应用,转换为程序能够读得懂的语法语句.Javascript编程中对程序流程控制主要是通过条件判断语句.循环控制语句及continue.break来完成的,其中条件判断 ...
- 保存Druid的监控记录
继上篇帖子之后 , 公司又要求将Druid Monitor的监控信息保存起来 , 因为Druid的监控记录在是缓存的,重启之后无法找回,所以需要做持久化,定期把监控记录转存到日志文件中 研究了半天 , ...
- php中的冒泡排序算法
<?php //php中的冒泡排序算法 //从大到小的排序方式 ,$arr[$j]>$arr[$j+1](这里换成了从小到大的排序方式) $arr=array(); $arr=array( ...
- Kafka 源代码分析.
这里记录kafka源代码笔记.(代码版本是0.8.2.1) kafka的源代码如何下载.这里简单说一下. git clone https://git-wip-us.apache.org/repos/a ...
- JAVA基础——编程练习(一)
java编程练习(一) 编程题目: 请根据所学知识,编写一个 JAVA 程序,实现输出考试成绩的前三名. 要求: 1. 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 6 ...
- Jenkins+Ant+TestNG+Testlink自动化构建集成(完整版)
这段时间折腾自动化测试,之前都是在Eclipse工程里面手工执行自动化测试脚本,调用Testlink API执行测试用例,目前搭建Jenkins自动化构建测试的方式,实现持续构建,执行自动化测试. 硬 ...
- c#面向对象-类(类及其构成)
学习c#已经快一个学期,在这一段时间里,通过自己的努力和老师指导,自己感觉收获颇丰,所以我想把自己学到东西整理一下,供大家点评!若有错误或不当之处,敬请指出. 今天,我先从类及其构成说起! 1. ...
- html的基本标记符号
文本标记:<h1><h2><h3><h4><h5><h6>: 段落标记:<p>: 空格: : 换行: ...
- kbengine 常见问题汇总
Q: KBEngine是什么,能用来做什么?A: KBEngine是一个通用网络游戏服务器引擎,适合绝大多数中心拓扑结构的网络游戏,包括但不限于即时和回合制MMORPG.副本类.房间类.卡牌.棋牌等. ...
- vue.js+UEditor集成 [前后端分离项目]
首先,谈下这篇文章中的前后端所涉及到的技术框架内容. 虽然是后端的管理项目,但整体项目,是采用前后端分离的方式完成,这样做的目的也是产品化的需求: 前端,vue+vuex+vue router+web ...