Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django 1.9中显示用户状态(在线、离线)?_Python_Django_Django Models_Django Admin - Fatal编程技术网

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

Python 如何在Django 1.9中显示用户状态(在线、离线)?,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,我正在尝试建立一个“社交”网站,在那里你可以添加朋友,创建帖子,等等。所以主要的问题是,如何使用Django管理API显示用户状态 提前谢谢 在html中: {{ user.is_authenticated }} 鉴于: def index(request): user = User.objects.get(username="root") return render(request, 'blog/index.jade', {'users': users}) 因此,这基本上会

我正在尝试建立一个“社交”网站,在那里你可以添加朋友,创建帖子,等等。所以主要的问题是,如何使用Django管理API显示用户状态

提前谢谢

在html中:

{{ user.is_authenticated }}
鉴于:

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

因此,这基本上会返回True或False,但这不仅是“root”用户的状态,而且是任何人的状态。

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

每5秒发出一次Ajax请求,该请求将由view处理。在每个请求更新表列上,对应于将更新时间戳的用户的last_active列(您必须使last_active列为timestamp类型)

每5秒发出另一个Ajax请求,通过比较每个用户对应的当前时间和上次活动时间戳来获取所有在线用户。它将返回所有在线用户

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

发出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");
        }
    });
})();

“在线”对某人来说意味着什么?@DanielRoseman和你一样,如果登录,在网站上可以有两种状态:在线或离线。所以我正在努力做到这一点。在线-您已登录,每个人都可以看到。离线-你们并没有登录到网站,每个人都会看到。是的,但我的问题是,如何确定某人是否“在线”。如果你去吃午饭会怎么样?或者在不注销的情况下关闭浏览器选项卡?@DanielRoseman,直到您的浏览器上带有站点的选项卡打开,您才处于联机状态:)谢谢!我将尝试:)不,不能,而且无论如何都没有理由避免ajax调用;他们工作得很好。据我所知,没有其他技术允许javascript与服务器端应用程序交互。如果您指的是React、Vue或其他javascript库,则这些库在幕后使用ajax调用。