如何在Django 1.9中显示用户状态(在线,离线)?

问题描述:

我试图做一个“社会人”的网站,在那里你可以加好友,创造职位等,所以主要的问题是,如何显示用户状态,使用Django管理API?如何在Django 1.9中显示用户状态(在线,离线)?

在此先感谢!

在HTML:

{{ user.is_authenticated }} 

鉴于:

def index(request): 
    user = User.objects.get(username="root") 
    return render(request, 'blog/index.jade', {'users': users}) 

所以这基本上返回我真或假,但这是没有的状态只对 “根” 的用户,但任何人。

+1

是什么意思的人是“在线”? –

+0

@DanielRoseman喜欢你可以有两个现场登录:你是在线或离线。所以我试图做到这一点。 在线 - 您已登录,每个人都可以看到。 离线 - 你没有登录网站,每个人都看到。 – TheDeadMays

+1

是的,但是如何确定某人是否“在线”,是我的问题。如果你去吃午饭会怎样?或关闭浏览器选项卡而不注销? –

你不会使用Django管理页面,查看被 - 这还只是针对数据库管理。你所指的{{user.is_authenticated}}是Django模板系统的一部分。这是一个在页面加载时写入页面的变量。在用户重新加载页面之前它不会改变。你需要做的是使用javascript的setInterval函数来定期做一个ajax回调服务器。所以你有一个带初始化函数的js文件,它调用setInterval函数,每隔20秒左右调用一次ajax函数。 ajax调用转到urls.py文件中定义的url,该文件将其与view.py文件中定义的视图相关联。这种观点查询数据库,看是否有用户进行身份验证或没有,然后返回一个HttpResponse这些信息到你的Ajax调用,它具有保存到一个对象,你再渲染页面的响应回调在任何你想要的方式,让用户知道其他用户或不被记录。

+0

谢谢!我会尝试 :) – TheDeadMays

让Ajax请求每5秒钟将通过视图进行处理。并且在每个请求更新表列last_active对应于将更新时间戳的用户(您必须生成时间戳类型的last_active列)。

再拍Ajax请求每5秒钟获取所有谁通过比较当前时间和对应于每个用户last_active时间戳在线用户。它将返回所有在线用户。

您可以使用此逻辑,使多用户/单用户聊天系统也。

制作Ajax请求代码:

(function getOnline() { 

    $.ajax({ 
     url: '/get_online', 
     type: "GET", 
     data: 
     { 
      user:user 
     }, 
     success: function(data) { 
      console.log("success"); 
     }, 
     complete: function() { 
      // Schedule the next request when the current one is complete 
      setTimeout(getOnline, 5000); 
     }, 
     error: function(xhr, errmsg, err) { 
       console.log("error"); 
     } 
    }); 
})();