【问题标题】:Django fire signal user_logged_out on browser closeDjango 在浏览器关闭时触发信号 user_logged_out
【发布时间】:2017-12-15 11:11:31
【问题描述】:
我正在开发一个为用户提供聊天功能的 django 应用程序。因此,我需要向其他用户显示登录或注销的状态。为此,我使用了 django 的signals 环境。只要用户使用注销按钮,一切正常。如果他们只是关闭浏览器或选项卡,则无法检测到状态切换为离线。
当浏览器或选项卡关闭时,触发 user_logged_out 信号的最佳方式是什么?
【问题讨论】:
标签:
django
signals
browser-close
【解决方案1】:
在聊天应用程序中通常不会这样处理。它的处理方式是,您定期向客户端请求某个 url。当您的服务器不再收到任何请求时,这意味着用户处于离线状态。
原因很简单。很多想法都可能出错。如果用户互联网出现故障怎么办?你怎么能检测到呢?所以最好的方法是你只用一个特定的 url 来收听这样的请求。当请求停止时。这意味着用户离线。在这种情况下,您不在乎发生了什么,用户关闭浏览器或互联网停止或计算机崩溃或计算机突然关闭等......
【解决方案2】:
您可以像这样触发信号:
from django.contrib.auth.signals import user_logged_in, user_logged_out
from django.dispatch import receiver
from django.conf import settings
@receiver(user_logged_in)
def _user_logged_in(sender, user, request, **kwargs):
..........your code here.........
@receiver(user_logged_out)
def _user_logged_out(sender, user, request, **kwargs):
.......your code here.........
查看this_link了解更多详情。