如何使用 Django 会话传递 "LIVE" 数据?
How to pass "LIVE" data with django sessions?
我在 django 管理员 response_change 中有一个很长的任务要处理。这需要几分钟时间,所以我想制作一个进度指示器。我将进度存储到会话中,但是当我从不同的视图(每 300 毫秒在 JS 的计时器上调用一次)读取会话时,会话不包含更新的进度(我在长任务中设置)。它始终具有上次长任务结束时会话具有的内容。
官方文档说“您可以在视图中的任何位置阅读和写入 request.session。您可以多次编辑它。”。那为什么它不起作用?
更新:接受的答案确实回答了这个问题。但我仍然不能将它应用到我的实际案例中。是的,在 2 个常规视图之间它工作得很好,但在管理员 response_change 和常规视图之间它没有。这绝对是同一个会话,因为 session_key、_auth_user_id、_auth_user_hash 在两个线程中是相同的。如果您有任何提示,请将它们留在 comments.Thanks
更新 2:将会话引擎设置为文件修复了它!为什么 ???
这不是速度问题,因为数据库会话引擎甚至不能在调试模式下工作,我会在调试模式下休息几分钟...
直到 request/when 服务器发回响应结束,会话才会被保存。您可以使用 request.session.save()
Ref: https://docs.djangoproject.com/en/dev/topics/http/sessions/#django.contrib.sessions.base_session.BaseSessionManager.save
自行保存会话
我在 django 管理员 response_change 中有一个很长的任务要处理。这需要几分钟时间,所以我想制作一个进度指示器。我将进度存储到会话中,但是当我从不同的视图(每 300 毫秒在 JS 的计时器上调用一次)读取会话时,会话不包含更新的进度(我在长任务中设置)。它始终具有上次长任务结束时会话具有的内容。
官方文档说“您可以在视图中的任何位置阅读和写入 request.session。您可以多次编辑它。”。那为什么它不起作用?
更新:接受的答案确实回答了这个问题。但我仍然不能将它应用到我的实际案例中。是的,在 2 个常规视图之间它工作得很好,但在管理员 response_change 和常规视图之间它没有。这绝对是同一个会话,因为 session_key、_auth_user_id、_auth_user_hash 在两个线程中是相同的。如果您有任何提示,请将它们留在 comments.Thanks
更新 2:将会话引擎设置为文件修复了它!为什么 ??? 这不是速度问题,因为数据库会话引擎甚至不能在调试模式下工作,我会在调试模式下休息几分钟...
直到 request/when 服务器发回响应结束,会话才会被保存。您可以使用 request.session.save()
Ref: https://docs.djangoproject.com/en/dev/topics/http/sessions/#django.contrib.sessions.base_session.BaseSessionManager.save