在Django的视图(View)外使用Session的方法


Posted in Python onJuly 23, 2015

从内部来看,每个session都只是一个普通的Django model(在 django.contrib.sessions.models 中定义)。每个session都由一个随机的32字节哈希串来标识,并存储于cookie中。 因为它是一个标准的模型,所以你可以使用Django数据库API来存取session。

>>> from django.contrib.sessions.models import Session
>>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead')
>>> s.expire_date
datetime.datetime(2005, 8, 20, 13, 35, 12)

你需要使用get_decoded() 来读取实际的session数据。 这是必需的,因为字典存储为一种特定的编码格式。

>>> s.session_data
'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
>>> s.get_decoded()
{'user_id': 42}

何时保存Session

缺省的情况下,Django只会在session发生变化的时候才会存入数据库,比如说,字典赋值或删除。

# Session is modified.
request.session['foo'] = 'bar'

# Session is modified.
del request.session['foo']

# Session is modified.
request.session['foo'] = {}

# Gotcha: Session is NOT modified, because this alters
# request.session['foo'] instead of request.session.
request.session['foo']['bar'] = 'baz'

你可以设置 SESSION_SAVE_EVERY_REQUEST 为 True 来改变这一缺省行为。如果置为True的话,Django会在每次收到请求的时候保存session,即使没发生变化。

注意,会话cookie只会在创建和修改的时候才会送出。 但如果 SESSION_SAVE_EVERY_REQUEST 设置为 True ,会话cookie在每次请求的时候都会送出。 同时,每次会话cookie送出的时候,其 expires 参数都会更新。

Python 相关文章推荐
python实现数通设备端口监控示例
Apr 02 Python
Python的pycurl包用法简介
Nov 13 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
python中reload(module)的用法示例详解
Sep 15 Python
python测试mysql写入性能完整实例
Jan 18 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 Python
在Python的Django框架的视图中使用Session的方法
Jul 23 #Python
详解Python的Django框架中的Cookie相关处理
Jul 22 #Python
在Django中使用Sitemap的方法讲解
Jul 22 #Python
用Python的Django框架来制作一个RSS阅读器
Jul 22 #Python
利用Python的Django框架生成PDF文件的教程
Jul 22 #Python
在Python的Django框架中生成CSV文件的方法
Jul 22 #Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 #Python
You might like
在PHP中执行系统外部命令
2006/10/09 PHP
通俗易懂的php防注入代码
2010/04/07 PHP
php设计模式 Facade(外观模式)
2011/06/26 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
js微信分享实现代码
2020/10/11 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
小程序转发探索示例
2019/02/19 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
python制作最美应用的爬虫
2015/10/28 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python API len函数操作过程解析
2020/03/05 Python
详解python中的异常捕获
2020/12/15 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
学校募捐倡议书
2014/05/14 职场文书
白岩松演讲
2014/05/21 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
2015年社区党务工作总结
2015/04/21 职场文书