在django Web应用程序中实现"上次看到"功能的最佳方法是什么?

Hob*_*use 7 python django apache2

我有一个正在运行的django/apache2 + memcached应​​用程序(ubuntu),并希望跟踪登录的在线用户.

追踪这个的最佳方法是什么?

每次登录用户加载页面时,我宁愿不写入数据库; 但还有其他选择吗?

maw*_*awi 4

一种方法可能是:

您创建一个中间件,对 process_response 执行以下操作:

  • 检查名为“online”的 cookie,但前提是用户已通过身份验证
  • 如果 cookie 不存在,
    • 设置一个名为“online”且值为“1”的 cookie
    • 将 cookie 的寿命设置为 10 分钟
    • 使用当前日期时间更新该用户的 auth.User 的“last_login”字段

现在,您的 auth.User 表中已包含所有当前登录的用户。所有具有比 datetime.now()-interval(15 分钟) 更新的 last_login 的用户都可能被视为“在线”。

大约每 10 分钟就会为每个登录用户写入数据库。根据您的需要调整值“10”和“15”。

这里的优点是数据库写入很少(根据你的两个数字设置10/15)。为了速度优化,请确保对 last_login 建立索引,因此包含 Count 在内的该字段上的过滤器非常快。

希望这可以帮助。