Python 在Django中编辑会话变量

Python 在Django中编辑会话变量,python,django,session-variables,Python,Django,Session Variables,我想在会话变量中存储Python列表,并在后续视图调用中对其进行编辑。我只是这样做了(以一种观点): 如果“x”不在request.session中: 请求。会话['x']=[] request.session['x'].append('test') 这仅在第一次尝试时有效,即在第一次调用此视图后,会话实际上将在dict键下包含['test']。但是,当我第二次尝试这样做时,列表会更新(我在调试时可以看到),但该值不会持久化,调试任何后续调用就证明了这一点:该值会长期保持['test'],而不

我想在会话变量中存储Python列表,并在后续视图调用中对其进行编辑。我只是这样做了(以一种观点):

如果“x”不在request.session中:
请求。会话['x']=[]
request.session['x'].append('test')
这仅在第一次尝试时有效,即在第一次调用此视图后,会话实际上将在dict键下包含
['test']
。但是,当我第二次尝试这样做时,列表会更新(我在调试时可以看到),但该值不会持久化,调试任何后续调用就证明了这一点:该值会长期保持
['test']
,而不是变成
['test','test']

我发现以下步骤是一种解决方法,但我不确定是否应该尝试解决它:此代码是否绕过Django施加的合理约束

temp\u var=request.session['x']
临时变量附加(“测试”)
request.session['x']=临时变量

在Django中,当会话被执行时,它会在更改时被更新

这对于不可变类型来说非常简单,因为它们总是通过赋值来更改,并且调用sessions
\uuuu setitem\uuuu
。会议了解了这一变化

如果在会话中存储一个可变对象(如列表),它只保存对它的引用。如果列表更改,则引用保持不变。在会话中不调用任何内容。它永远不会注意到变化


因此,在Django会话中,您应该始终使用赋值来存储或更改值。

在Django中,当会话被更改时,会话将被更新

这对于不可变类型来说非常简单,因为它们总是通过赋值来更改,并且调用sessions
\uuuu setitem\uuuu
。会议了解了这一变化

如果在会话中存储一个可变对象(如列表),它只保存对它的引用。如果列表更改,则引用保持不变。在会话中不调用任何内容。它永远不会注意到变化


因此,在Djangos会话中,您应该始终使用赋值来存储或更改值。

看起来我应该进一步阅读文档:看起来我应该进一步阅读文档: