tornado 自定义session (一)
tornado 中没有session功能,需要我们自己实现。
目录:

settings:
settings = {
'template_path': 'templates',
'static': 'static'
}
home:
#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = '无名小妖'
import tornado.web
import hashlib
import time container = {} def md5():
m = hashlib.md5()
m.update(bytes(str(time.time()), encoding='utf8'))
return m.hexdigest() class Session: def __init__(self, handler):
random_str = handler.get_cookie('__session_id__')
if random_str:
if random_str in container:
self.r_str = random_str
else:
random_str = md5()
container[random_str] = {}
self.r_str = random_str
else:
random_str = md5()
container[random_str] = {}
self.r_str = random_str
handler.set_cookie('__session_id__', random_str, expires=time.time()+200) def set_session(self, key, value):
ret = container[self.r_str][key] = value
return ret def get_session(self, key):
ret = container[self.r_str].get(key, None)
return ret class BaseHandler(tornado.web.RequestHandler):
def initialize(self):
self.session_info = Session(self) class MainHandler(BaseHandler):
def get(self):
# self.write("Hello, world")
self.render('index.html') def post(self, *args, **kwargs):
user = self.get_argument('user')
pwd = self.get_argument('pwd')
if user == 'xiao' and pwd == '123':
self.session_info.set_session('is_login', True)
self.session_info.set_session('user', user)
self.redirect('/main')
else:
self.redirect('/index') class IndexHandler(BaseHandler):
def get(self):
current_user = self.session_info.get_session('user')
if current_user:
self.write(current_user)
else:
self.write('未登录')
注:自己写个session类,再重写initialize方法。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/index" method="post">
<input type="text" name="user">
<input type="text" name="pwd">
<input type="submit" value="提交">
</form>
</body>
</html>
app:
from tornado import ioloop
import tornado.web
from controler.home import MainHandler, IndexHandler
from commons.settings import settings application = tornado.web.Application([
(r"/index", MainHandler), # url--对应类,django对应的是函数
(r"/main", IndexHandler), # url--对应类,django对应的是函数
],
**settings # 加载配置
) if __name__ == "__main__":
application.listen(8888)
ioloop.IOLoop.instance().start()
效果:
未登录时,访问main:

登录:

登陆后:

证明已登录。
tornado 自定义session (一)的更多相关文章
- Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...
- tornado自定义session
这开始之前我们先了解以下什么是cookie和session 简单的说: cookie是保存在客户端的键值对 session是保存在服务端的键值对 session依赖与cookie 在Django中,可 ...
- tornado 自定义session (二)
有了上一步的基础,我们将session改造成一个模块,这样我们就可以通过配置,来使用不同方式(redis,数据库等)的session. 添加一个新目录:TornadoSession conf.py是配 ...
- Tornado 自定义Form,session实现方法
一. 自定义Tornado 验证模块 我们知道,平时在登陆某个网站或软件时,网站对于你输入的内容是有要求的,并且会对你输入的错误内容有提示,对于Django这种大而全的web框架,是提供了form表单 ...
- Python web框架 Tornado(三)自定义session组件
我们在学习Django框架的过程中,内部封装了session组件,以方便于我们使用进行验证.但是Tornado框架是没有session的,所以如果想使用session的话,就需要我们自己定制相对应的组 ...
- python_way ,自定义session
python_way ,自定义session container = {} #可以是数据库,可以是缓存也可以是文件 class Session: def __init__(self, handler) ...
- Tronado自定义Session
这里就不一一诉说Session和Cookie直接的关系了,下面以一张图来概括: 下面是一个简单的Tornaod自定义Session的例子,看完后你可能会明白为什么我们在Django里可以直接使用req ...
- 第二百六十九节,Tornado框架-Session登录判断
Tornado框架-Session登录判断 Session需要结合cookie来实现 Session的理解 1.用户登录系统时,服务器端获取系统当前时间,进行nd5加密,得到加密后的密串 2.将密串作 ...
- 可灵活扩展的自定义Session状态存储驱动
Session是互联网应用中非常重要的玩意儿,对于超过单台部署的站点集群,都会存在会话共享的需求.在web.config中,微软提供了sessionstate节点来定义不同的Session状态存储方式 ...
随机推荐
- AX内部公司
<object width="450" height="500" align="middle" id="reader&quo ...
- redis整合异常总结
问题:org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field ' ...
- 如何使用 MSBuild Target(Exec)中的控制台输出
我曾经写过一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包,通过编写一个控制台程序来参与编译过程.但是,相比于 基于 Task 的方式,可控制的因素还是太少了. 有没有什么办法能够让 ...
- tableview小结-初学者的问题
初学者的问题主要集中在,下面几个问题: 一.几个函数总是不被调用:例如: - (UIView *)tableView:(UITableView *)tableView viewForHeaderInS ...
- 【java基础】java集合系列之HashMap
Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论. 1.hashma ...
- 最短路径问题的Dijkstra算法
问题 最短路径问题的Dijkstra算法 是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出.迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法终于得到一个最短路径树> ...
- 使用实例 ---- 使用NUnit在.Net编程中进行单元测试
[--- 资料是从免费网站上获取的,上载在这里,只为交流学习目的,文章原作者保留所有权力,如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除.同时本人深表歉意,并致以崇高的谢意!e ...
- 【转】如何将FLAC格式转为MP3格式
原文网址:http://jingyan.baidu.com/ae/3aed632e65708470108091ca.html FLAC全称为无损音频压缩编码,FLAC格式又称无损格式 不会破坏原有的音 ...
- phpMyAdmin“缺少 mcrypt 扩展。请检查 PHP 配置。”解决办法
在ecmall二次开发中因php版本要求低于5.3,而如下更新要求升级PHP,所以以下方式不适合于ecmall商城项目. 解决办法:安装php-mcrypt libmcrypt libmcrypt-d ...
- nagios(centreon)监控Linux日志
1 将check_log3.pl下载后放到客户端服务器的插件文件夹[root@SSAVL2475 libexec]# cp /tmp/check_log3.pl /usr/local/nagios/ ...