【问题标题】: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了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-06
      • 2015-05-18
      • 2012-01-08
      • 2015-04-16
      • 2011-06-20
      • 1970-01-01
      • 2017-12-02
      • 2016-04-23
      相关资源
      最近更新 更多