在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中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
使用tensorflow实现线性回归
Sep 08 Python
python判断输入日期为第几天的实例
Nov 13 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
python实现大文本文件分割
Jul 22 Python
Python字符串的修改方法实例
Dec 19 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
Python sublime安装及配置过程详解
Jun 29 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 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/12/25 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
理解JavaScript的prototype属性
2012/02/11 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
Python类属性与实例属性用法分析
2015/05/09 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
基于python实现名片管理系统
2018/11/30 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
python虚拟环境完美部署教程
2019/08/06 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
Hotels.com印度:酒店预订
2019/05/11 全球购物
优秀党员转正的自我评价
2013/10/06 职场文书
2014学年自我鉴定
2014/02/23 职场文书
评职称个人总结
2015/03/05 职场文书
长征观后感
2015/06/09 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
详解python的内存分配机制
2021/05/10 Python