tornado 自定义session (一)
2024-08-24 18:22:47
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:
登录:
登陆后:
证明已登录。
最新文章
- 如何用百度MIP快速搭建体验友好的移动页面
- ubuntu12.04中shell脚本无法使用source的原因及解决方法
- <;一>;获取数据库连接
- [2015hdu多校联赛补题]hdu5384 Danganronpa
- nginx二级域名配置到文件夹
- C语言编译链接
- Linux下安装Xdebug
- thinkphp接手机网站接口
- 基于visual Studio2013解决C语言竞赛题之0307函数求值
- 【设计模式系列】之OO面向对象设计七大原则
- 浅谈扩展欧几里得算法(exgcd)
- Android开发之字体设置
- springboot之scheduled任务调度
- A1107. Social Clusters
- oracle的存储过程和定时任务编写体会
- Windows系统下安装zip命令
- 8 -- 深入使用Spring -- 3...4 在ApplicationContext中使用资源
- jaeger 使用ElasticSearch 作为后端存储
- 【week2】结对编程-四则运算 及感想
- ant-design getFieldDecorator 无法获取自定义组件的值
热门文章
- ubuntu下erlang man的安装
- Java [Leetcode 387]First Unique Character in a String
- Sprint第一个冲刺(第十天)
- sentry docker-compsoe 安装以及简单使用
- Java连接MySQL数据库和Oracle数据库并进行简单的SQL操作的一次尝试
- 使用RawComparator加速Hadoop程序
- Oracle条件分支查询
- Eclipse Failed to load D:\android-sdk-windows\build-tools\27.0.3\lib\dx.jar
- spring cache之自定义keys的过期时间
- 安装windows 2003 server