Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用django在会话中创建对象的实例?_Python_Django_Session - Fatal编程技术网

Python 如何使用django在会话中创建对象的实例?

Python 如何使用django在会话中创建对象的实例?,python,django,session,Python,Django,Session,我有一个对象模型,用户在客户端给出的每个答案都必须调用它。但问题是,每当用户单击答案时,我的视图就会运行,并且对象会再次初始化,这不应该发生。因此,我考虑在另一个单独的视图中创建会话中的对象实例,并在任何视图中反复使用同一实例 但这让我想到: request.session['qn_obj'] = question_class() objects not JSON serializable 我需要关于如何使用django在会话中创建实例的帮助。django中的会话不存储在服务器内存中

我有一个对象模型,用户在客户端给出的每个答案都必须调用它。但问题是,每当用户单击答案时,我的视图就会运行,并且对象会再次初始化,这不应该发生。因此,我考虑在另一个单独的视图中创建会话中的对象实例,并在任何视图中反复使用同一实例

但这让我想到:

request.session['qn_obj'] = question_class()
    objects not JSON serializable


我需要关于如何使用django在会话中创建实例的帮助。

django中的会话不存储在服务器内存中,因此它们不能包含纯对象。它们被序列化为字符串,可以存储在某些存储后端(数据库、缓存、用户cookie等)

默认情况下,django对会话使用JSON序列化程序。JSON序列化程序无法序列化对象

django中内置了另一个序列化程序:pickle。它几乎可以序列化python中创建的任何内容,但它有一些缺点。它的速度较慢,当与任何不受信任的会话存储(如cookie)一起使用时,它可能会成为非常严重的安全漏洞,因为攻击者只需交换序列化数据即可运行任何代码。有关更多信息,请参阅


此外,反序列化上的pickle只会尝试从序列化时重新创建对象状态。这个对象不会仅仅保留在内存中,所以考虑如果从泡菜反序列化它比从头开始重新创建它要好(像以前那样)。< /P>我不希望它反序列化到创建状态,但最后一个更新状态。我该如何实现这一点?我的意思是我们可以实际更新会话对象吗?可能吗?:)