在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求解平方根的方法
Mar 11 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
PyTorch中反卷积的用法详解
Dec 30 Python
多个python文件调用logging模块报错误
Feb 12 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
Django配置跨域并开发测试接口
Nov 04 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 29 Python
jupyter notebook指定启动目录的方法
Mar 02 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
php实现读取超大文件的方法
2014/07/28 PHP
php实现三级级联下拉框
2016/04/17 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
js中null与空字符串""的区别讲解
2019/01/17 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
python输出决策树图形的例子
2019/08/09 Python
python学生管理系统的实现
2020/04/05 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
python 读取串口数据的示例
2020/11/09 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
为什么要做架构设计
2015/07/08 面试题
中国梦口号
2014/06/13 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
网吧员工管理制度
2015/08/05 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle