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

时间:2016-01-28 16:15:09

标签: python django django-models django-admin

我正在尝试制作一个" social"网站,你可以添加朋友,创​​建帖子等。所以主要的问题是,如何使用Django Admin API显示用户状态?

提前致谢!

在html中:

{{ user.is_authenticated }}

在视图中:

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

所以这基本上归还了我的真或假,但这不仅仅是" root"用户,但任何人。

2 个答案:

答案 0 :(得分:1)

每隔5秒发出一次Ajax请求,这将由视图处理。并且在每个请求更新表列last_active对应于将更新时间戳的用户(您必须创建time_amp类型的last_active列)。

每隔5秒发出一次Ajax请求,通过比较每个用户对应的当前时间和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");
        }
    });
})();

答案 1 :(得分:0)

您不会使用Django管理页面 - 这只是用于数据库管理。你在{{user.is_authenticated}}中提到的是Django模板系统的一部分。这是在页面加载时写入页面的变量。在用户重新加载页面之前,它不会更改。您需要做的是使用javascript的setInterval函数来定期对服务器执行ajax调用。所以你有一个带有初始化函数的js文件,该函数调用setInterval函数,该函数反过来每20秒左右进行一次ajax调用。 ajax调用转到urls.py文件中定义的url,该文件将其与views.py文件中定义的视图相关联。该视图查询数据库以查看用户是否经过身份验证,然后将HttpResponse中的信息返回给您的ajax调用,该调用具有一个回调函数,用于保存对象的响应,然后您可以将其呈现给页面。你想要的方式,让用户知道其他用户是否登录。