在Django的视图(View)外使用Session的方法
2015-07-23 00:00
941 查看
从内部来看,每个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_S***E_EVERY_REQUEST 为 True 来改变这一缺省行为。如果置为True的话,Django会在每次收到请求的时候保存session,即使没发生变化。
注意,会话cookie只会在创建和修改的时候才会送出。 但如果 SESSION_S***E_EVERY_REQUEST 设置为 True ,会话cookie在每次请求的时候都会送出。 同时,每次会话cookie送出的时候,其 expires 参数都会更新。
相关文章推荐
- Django的session中对于用户验证的支持
- 在Django的session中使用User对象的方法
- 详解Django框架中用户的登录和退出的实现
- 在Django中限制已登录用户的访问的方法
- Django中对通过测试的用户进行限制访问的方法
- 在Django中管理Users和Permissions以及Groups的方法
- 在Django的模板中使用认证数据的方法
- 详解Django中的权限和组以及消息
- 简介Django框架中可使用的各类缓存
- Django中的CACHE_BACKEND参数和站点级Cache设置
- 详解Django框架中的视图级缓存
- Django框架下在URLconf中指定视图缓存的方法
- VIEWGOOD(远古)助力警官学院信息化平台建设
- socket协议下如何缓存图片--推荐EGOCache
- HDU 1934 Minimum Inversion Number(树状数组,线段树)
- poj 2762 Going from u to v or from v to u?
- golang+websocket
- django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)
- HDU 3966 Aragorn's Story(树链剖分+线段树区间更新+手动扩大内存)
- go语言实现线程池