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状态存储方式 ...
随机推荐
- 封装 一下 php sql 的存储语句
function get_insert_sql($obj){ $str1 =""; $str2 =""; foreach($obj as $key => ...
- shell脚本中执行sql的例子
这个例子演示了如何在shell脚本中执行多个sql来操作数据库表. #! /bin/sh USER_HOME=/home/`whoami` . /etc/profile if [ -f ${USER_ ...
- log4j 格式详解
### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.lo ...
- GraphQL和RESTful的区别
GraphQL和RESTful的区别 http://graphql.cn/learn/ https://www.cnblogs.com/Wolfmanlq/p/9094418.html http:// ...
- 洛谷 P2828 Switching on the Lights(开关灯)
传送门 题目大意:n*n的网格,每个网格是一个房间 都关着灯,只有(1,1)开着灯,且(x,y)有着(z,k)房间灯的开关. 问从(1,1)开始走最多点开几盏灯. 题解:搜索+骗分. 劳资的骗分天下无 ...
- chrome安装vue-devtools
安装方法1: 需正常打开chrome商店,搜索vuejs devtools 安装.chrome://extensions/ 开发者工具-扩展程序下启用: 方法2: github下载插件,npm包安装依 ...
- 性能指标术语&理发店模型
2015-11-26 09:13:53 响应时间 响应时间=呈现时间+系统响应时间 呈现时间取决于数据在被客户端收后到呈现出页面所消耗的时间: 系统响应时间指应用系统从请求发出开始到客户端接收到数据所 ...
- Python 函数 -getattr()
getattr(object, name[, default]) getatt() 函数用于返回一个对象属性值.object 对象.name 字符串,对象属性.object 默认返回值,如果不提供该参 ...
- 什么是spark(一) 分区以及和MR的区别
什么是spark,是一个分布式计算平台,或者说是分布式计算引擎,他的职责就是将指定的数据读入到各个node的内存中,然后计算.所以spark是具有泛化性质的,只要数据源是可读入的,读到内存里面之后,处 ...
- linux mount / umount 命令的基本用法 及 开机自动挂载
格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有: -a 安装在/etc/fstab文件中类出的所有文件系统. -f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文 ...