如何删除django中的会话变量?

时间:2014-08-12 21:54:47

标签: python django

我的会话变量是' cart':

cart = {'8': ['a'], ['b'], '9': ['c'], ['d']}

如果我要删除所有购物车变量,我只需在Python中执行此操作:

del request.session['cart']

但我只是想删除键' 8',所以我试试这个,但它不起作用:

del request.session['cart']['8']

但是,如果我打印request.session [' cart'] [' 8']并获得 a,b

2 个答案:

答案 0 :(得分:6)

django会话对象只能在修改后保存。但是因为您正在修改会话中的对象,所以会话对象不知道它被修改,因此无法保存。

让会话对象知道其修改后的用途:

request.session.modified = True

来自django docs:

https://docs.djangoproject.com/en/dev/topics/http/sessions/

  

保存会话时默认情况下,Django仅保存到会话   修改会话时的数据库 - 即它是否为任何一个   字典值已分配或删除:

# 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' 
  

在上面的最后一个案例中   例如,我们可以明确地告诉会话对象它已经存在   通过在会话对象上设置modified属性进行修改:

  request.session.modified = True
  

要更改此默认行为,请将SESSION_SAVE_EVERY_REQUEST设置为True。设置为True时,   Django会在每次请求时将会话保存到数据库中。

     

请注意,会话cookie仅在会话结束时发送   创建或修改。如果SESSION_SAVE_EVERY_REQUEST为True,则为   会话cookie将在每次请求时发送。

     

同样,每次更新会话cookie的到期部分   会话cookie已发送。

     

如果响应的状态代码为500,则不会保存会话。

答案 1 :(得分:1)

我的request.session['cart']是一个列表,如下所示:[u'2', u'2', u'1']

所以这对我有用:

list_cart  = request.session['cart']
list_cart.remove('2')

结果:[u'2', u'1']