使用 Django 获取已连接用户的列表

use*_*840 2 python django django-authentication

我正在寻找一种方法来跟踪在线/离线用户。因此,如果我在列表中显示所有用户,我可以有一个图标或某种标志来显示这一点。这是内置在 Django 的默认 Auth 系统中吗?

我的第一个想法是在我的个人资料中简单地在模型中添加一个名为 last_logout 的字段,并在每次用户注销时使用日期/时间更新它。

有了这个信息和内置的last_login,我应该能够做出某种函数来确定用户是否登录/在线,对吗?

或者我应该有一个名为“在线”的布尔字段,当用户登录和注销时我可以更改它?

sta*_*alk 5

仅用 django 很难做到。对于此类任务,异步框架更合适。

例如,龙卷风

用户不会在每次离线时明确地注销。他们只需关闭浏览器即可。仅使用 django auth 应用程序您无法知道它。它不是为此类任务而设计的。

即使您检查未过期的会话,它也不会为您提供所有在线用户,因为会话可能在 30 天内未过期。

那么要获得真正的在线用户,可能的解决方案是:

  1. 每个用户都会通过 javascript 向您的服务器发送一些数据,例如每 10 秒一次。您可以在服务器上获取该数据并将用户放入缓存中并将缓存键设置为活动 10 秒。因此,当您需要知道谁现在在线时,您将检查缓存。但这不是一个好的解决方案,因为它需要大量的服务器资源。
  2. 在服务器端使用异步框架(tornado )(您可以为确切的请求设置单独的进程)。并使用 websockets(SockJS是一个很好的客户端库)。这是一个更复杂的解决方案,但更好。