2016-01-28 2 views
2

Я пытаюсь создать «социальный» сайт, где вы можете добавлять друзей, создавать сообщения и т. Д. Поэтому основная проблема заключается в том, как показать статус пользователя, используя Django Admin 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 Как у вас может быть два статуса на сайте, если вы входите в систему: вы находитесь в сети или в автономном режиме. Поэтому я пытаюсь это сделать. Online - вы зарегистрированы, и все это могут видеть. Оффлайн - вы не зашли на сайт, и все это видят. – TheDeadMays

+1

Да, но что определяет, является ли кто-то «онлайн», был мой вопрос. Что произойдет, если вы пойдете на обед? Или закройте вкладку браузера без выхода из системы? –

ответ

0

Вы не будете использовать страницу администрирования Django для этого - это просто для управления базой данных. То, что вы имеете в виду с {{user.is_authenticated}}, является частью системы шаблонов Django. Это переменная, которая записывается на страницу при загрузке страницы. Он не изменится, пока пользователь не перезагрузит страницу. Что вам нужно сделать, так это использовать функцию setInterval для javascript, чтобы регулярно выполнять обратный вызов ajax на сервер. Таким образом, у вас есть файл js с функцией инициализации, которая вызывает функцию setInterval, которая, в свою очередь, вызывает аякс-вызов каждые 20 секунд или около того. Вызов ajax переходит к URL-адресу, указанному в вашем файле urls.py, который связывает его с представлением, определенным в файле views.py. Это представление запрашивает базу данных для проверки подлинности пользователя или нет, а затем возвращает эту информацию в HttpResponse для вашего вызова ajax, у которого есть обратный вызов, который сохраняет ответ на объект, который затем отображается на странице в любом месте чтобы вы знали, что другие пользователи вошли или не вошли в систему.

+0

Спасибо! Я попробую :) – TheDeadMays

1

Сделайте запрос Ajax каждые 5 секунд, который будет обрабатываться по представлению. И по каждому запросу обновляется столбец таблицы last_active, соответствующий этому пользователю, который обновляет временную метку (вы должны сделать последний_ситуационный столбец типа метки времени).

Сделайте еще один запрос Ajax каждые 5 секунд, чтобы получить всех пользователей, которые находятся в сети, сравнивая текущее время и last_active временную метку, соответствующую каждому пользователю. Он вернет всех пользователей в Интернете.

Вы можете использовать эту логику для создания многопользовательской/singleuser chat-системы.

Код для создания запроса 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"); 
     } 
    }); 
})(); 
Смежные вопросы