Обновите страницу Django, если измените данные другим пользователем - PullRequest
2 голосов
/ 12 ноября 2011

У меня есть тестовое приложение django.

На одной странице теста показывается один и тот же вопрос всем пользователям.

Мне бы хотелось, чтобы, когда пользователь правильно ответил, отправьте сигнал в браузер другого активного пользователя, чтобы перейти к следующему вопросу.

Я узнал о сигналах в django, я учусь работать с ними, но сейчас не знаю, как отправить «сигнал обновления» в браузер клиента.

Я думаю, что это может быть связано с кодом javascript, который проверяет, изменилось ли определенное значение (фактический вопрос) и изменилось ли, перезагрузите страницу, но я не знаю этот язык, и информация, которую я нахожу, была запутана.

Кто-нибудь может мне помочь?

Большое спасибо.

Ответы [ 3 ]

4 голосов
/ 12 ноября 2011

Не существует способа отправить событие с сервера в браузер.Но вы можете периодически запрашивать вашу веб-страницу на сервере (скажем, каждые 5 секунд).

Код в javascript / jquery может выглядеть следующим образом

setInterval(function(){
    $.post("your_ajax_handler_url/is_answerd", userId, function(xhr){
       if(xhr.responseText == "answered"){
          location.reload(true);
       }  
    }
 }, 5000);
3 голосов
/ 12 ноября 2011

Это совсем не то, для чего нужны сигналы в Джанго.Сигналы в django - это перехватчики на стороне сервера, которые позволяют вам выполнять задачи на сервере, когда происходит определенное событие.

Чтобы «отправить обновление» в браузер, вам необходимо использовать серверный подход, такой как Comet .В качестве альтернативы вы можете заставить своих клиентов периодически опрашивать сервер в поисках обновлений.

Вот несколько ссылок:

Как реализовать серверный пуш / длинный опрос / комету с использованием PHP и Javascript

Как реализовать основные«Длинный опрос»?

0 голосов
/ 12 ноября 2011

Что вам нужно, так это комент (http://en.wikipedia.org/wiki/Comet_%28programming%29) и торнадо (http://www.tornadoweb.org/)

)
...