【问题标题】:How to create an instance of an object in session using django? [closed]如何使用 django 在会话中创建对象的实例? [关闭]
【发布时间】:2016-09-08 21:03:34
【问题描述】:

我有一个对象模型,必须在客户端用户给出的每个答案上调用它。但问题是每当用户单击答案时,我的视图就会运行并且对象会再次初始化,这不应该。所以我想在另一个单独的视图中在会话中创建对象实例,并在任何视图中一次又一次地重用同一个实例。

但它给了我这个:

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

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

【问题讨论】:

    标签: python django session


    【解决方案1】:

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

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

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

    此外,反序列化的 pickle 只会尝试从序列化时重新创建对象状态。该对象不会只保存在内存中,因此请考虑从 pickle 反序列化它是否比从头开始重新创建它更好(就像您之前所做的那样)。

    【讨论】:

    • 我不希望它反序列化到创建状态,而是最后更新的状态。我怎样才能做到这一点?
    • 我的意思是我们真的可以更新会话对象吗?可能吗 ? :)
    猜你喜欢
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2020-02-26
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多