在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 04 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
matplotlib绘制动画代码示例
Jan 02 Python
Python字典及字典基本操作方法详解
Jan 30 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
DES加密解密算法之python实现版(图文并茂)
Dec 06 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
Python实现数值积分方式
Nov 20 Python
Python configparser模块配置文件过程解析
Mar 03 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
快速一键生成Python爬虫请求头
Mar 04 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编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
如何用php获取文件名后缀
2013/06/09 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
对比分析json及XML
2014/11/28 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python的Flask框架与数据库连接的教程
2015/04/20 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
Djang中静态文件配置方法
2015/07/30 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
python将数据插入数据库的代码分享
2020/08/16 Python
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
医学生就业推荐表自我鉴定
2014/03/26 职场文书
2014年信访工作总结
2014/11/17 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android