首页 > 编程 > Python > 正文

在Django的视图(View)外使用Session的方法

2020-01-04 17:59:41
字体:
来源:转载
供稿:网友

这篇文章主要介绍了在Django的视图(View)外使用Session的方法,Django是最具人气的Python web开发框架,需要的朋友可以参考下

从内部来看,每个session都只是一个普通的Django model(在 django.contrib.sessions.models 中定义)。每个session都由一个随机的32字节哈希串来标识,并存储于cookie中。 因为它是一个标准的模型,所以你可以使用Django数据库API来存取session。

 

 
  1. >>> from django.contrib.sessions.models import Session 
  2. >>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead'
  3. >>> s.expire_date 
  4. datetime.datetime(2005, 8, 20, 13, 35, 12) 

你需要使用get_decoded() 来读取实际的session数据。 这是必需的,因为字典存储为一种特定的编码格式。

 

 
  1. >>> s.session_data 
  2. 'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...' 
  3. >>> s.get_decoded() 
  4. {'user_id': 42} 

何时保存Session

缺省的情况下,Django只会在session发生变化的时候才会存入数据库,比如说,字典赋值或删除。

 

 
  1. # Session is modified. 
  2. request.session['foo'] = 'bar' 
  3.  
  4. # Session is modified. 
  5. del request.session['foo'
  6.  
  7. # Session is modified. 
  8. request.session['foo'] = {} 
  9.  
  10. # Gotcha: Session is NOT modified, because this alters 
  11. # request.session['foo'] instead of request.session. 
  12. request.session['foo']['bar'] = 'baz' 

你可以设置 SESSION_SAVE_EVERY_REQUEST 为 True 来改变这一缺省行为。如果置为True的话,Django会在每次收到请求的时候保存session,即使没发生变化。

注意,会话cookie只会在创建和修改的时候才会送出。 但如果 SESSION_SAVE_EVERY_REQUEST 设置为 True ,会话cookie在每次请求的时候都会送出。 同时,每次会话cookie送出的时候,其 expires 参数都会更新。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表