在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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
更改Python命令行交互提示符的方法
Jan 14 Python
Python中将字典转换为列表的方法
Sep 21 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
Dec 20 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
django Admin文档生成器使用详解
Jul 22 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
Anaconda的安装及其环境变量的配置详解
Apr 22 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
python基于win32api实现键盘输入
Dec 09 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.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
[01:46]新英雄登场
2019/09/10 DOTA
Python 基础知识之字符串处理
2017/01/06 Python
Python数据集切分实例
2018/12/08 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
Python如何实现远程方法调用
2020/08/07 Python
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
别名指示符是什么
2012/10/08 面试题
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书