在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中获取网页状态码的两个方法
Nov 03 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
python使用百度文字识别功能方法详解
Jul 23 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
python openssl模块安装及用法
Dec 06 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 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 VS ASP
2006/10/09 PHP
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
2014过年倒计时示例
2014/01/31 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
Ext 表单布局实例代码
2009/04/30 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
树莓派实现移动拍照
2019/06/22 Python
python 搜索大文件的实例代码
2019/07/08 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
大专毕业生自我鉴定
2013/11/21 职场文书
高考励志标语
2014/06/05 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
二十年同学聚会感言
2015/07/30 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书