【问题标题】:Django. How I can update all sessions?姜戈。如何更新所有会话?
【发布时间】:2017-02-19 16:26:31
【问题描述】:

我创建了简单的学习应用程序:其中包含 Status 模型和 Tasks 模型的列,例如 trello.com。

当我将任务拖放到其他状态列时,我使用 Ajax 调用将页面更新为单个用户。问题是,我如何更新所有会话的元素?

我需要一些外部的东西,或者我只能在 django 上做?

对不起,如果我的问题太宽泛了,我不是要求为我编写代码,我只是寻求建议。

【问题讨论】:

  • 如果您想更新其他用户的浏览器,您将需要一些实时应用程序,您可以查看SwampDragon
  • @Gocht 谢谢,我会查的

标签: django


【解决方案1】:

假设您使用的是标准的 Django Session 模型:

from django.contrib.sessions.models import Session

all_sessions = Session.objects.all()
all_current_sessions = Session.objects.filter(expire_date__lte=timezone.now())

# What fields are available in sessions? 
print(Session._meta.fields)
# Standard would be - (<django.db.models.fields.CharField: session_key>, <django.db.models.fields.TextField: session_data>, <django.db.models.fields.DateTimeField: expire_date>

for session in all_sessions:
    session_data = session.get_decoded()
    print(session_data)

为了写入 session_data,您需要重新编码session_data。有关这方面的信息,请参阅此great post

编辑:要对此进行补充,请参阅 this answer,其中展示了如何使用 SessionStore 重新编码会话数据。

来自链接的答案 -

from django.contrib.sessions.backends.db import SessionStore

# look up our sessions in session store
for session_key in logged_in:
    s = SessionStore(session_key=session_key)
    s['test'] = True
    s.save()
    s.modified
    # True

【讨论】:

  • 这很酷,但我认为它不能解决我的问题。也许我的问题不正确,我的问题是:当有人更改 dom 元素时,我想为所有会话更新此更改,无需加载页面,实时
  • 由于现代 Django base64 对每个会话字典进行编码,因此您必须对每个会话记录进行解码和重新编码;这是很多开销而且不实用。如果您想在所有会话之间共享一个公共变量,为什么不存储在数据库中,由某人的点击触发,并使用 AJAX 检索它?我不明白这里的最终目标,但会话似乎是一种非常迟钝的方法。
  • 谢谢您,非常感谢您的帮助。我在SwampDragon 构建它
  • 非常酷,我亲自研究了 SwampDragon,到目前为止它非常非常诱人!在此之前并没有这方面的先验知识。谢谢!
  • 感谢@Gocht,他在评论中谈到了这个很酷的事情来回答:)
猜你喜欢
  • 2015-07-18
  • 2017-06-15
  • 2020-08-17
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 2020-10-18
  • 2017-10-06
  • 1970-01-01
相关资源
最近更新 更多