在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 代码性能优化技巧分享
Aug 07 Python
python实现socket端口重定向示例
Feb 10 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
对Django中内置的User模型实例详解
Aug 16 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
pytorch 常用线性函数详解
Jan 15 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
如何理解python对象
Jun 21 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
PHP抽象类 介绍
2012/06/13 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
微信小程序实现选项卡功能
2020/06/19 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
如何使用Python调整图像大小
2020/09/26 Python
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
电厂职工自我鉴定
2014/02/20 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
婚假请假条怎么写
2014/04/10 职场文书
防沙治沙典型材料
2014/05/07 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
民事起诉状范文
2015/05/19 职场文书
公司联欢会主持词
2015/07/04 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书