我的会话变量是' 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
答案 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']