【问题标题】:How to pass "LIVE" data with django sessions?如何通过 django 会话传递“实时”数据?
【发布时间】:2021-05-14 05:11:11
【问题描述】:

我在 django 管理员的response_change 中有一项很长的任务要处理。这需要几分钟,所以我想制作一个进度指示器。我将进度存储到会话中,但是当我从不同的视图读取会话时(每 300 毫秒在 JS 的计时器上调用一次),会话不包含更新的进度(我在长任务中设置)。它始终具有上次长任务结束时会话的内容。

官方文档说“您可以在视图中的任何位置阅读并写入 request.session。您可以多次编辑它。”。那么为什么它不起作用呢?

更新:接受的答案确实回答了这个问题。但我仍然无法将其应用于我的实际案例。是的,在 2 个常规视图之间它工作得很好,但在管理员的 response_change 和常规视图之间它没有。这绝对是同一个会话,因为 session_key、_auth_user_id、_auth_user_hash 在两个线程中都是相同的。如果您有任何提示,请在 cmets 中留下。谢谢

Update2:将会话引擎设置为文件已修复!为什么 ??? 这不是速度问题,因为数据库会话引擎甚至无法在调试模式下工作,我需要休息几分钟......

【问题讨论】:

    标签: django session


    【解决方案1】:

    在请求结束/服务器发回响应之前,不会保存会话。您可以使用request.session.save() 自己保存会话,参考:https://docs.djangoproject.com/en/dev/topics/http/sessions/#django.contrib.sessions.base_session.BaseSessionManager.save

    【讨论】:

    • 就是这样。 TBH 它在管理员的 response_change 中仍然不起作用,但我能够在 2 个常规视图中对其进行测试,并保存修复它。不需要参数。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2013-08-11
    • 2012-02-17
    相关资源
    最近更新 更多