Fran Sobrino
Fran Sobrino

Reputation: 23

Django refresh page if change data by other user

I have a test django app.

In one page the test show the same question to all users.

I'd like that when a user answers correctly, send a signal to other active user's browser to refresh to the next question.

I have been learning about signals in django I learning work with them but I don't now how send the "refresh signal" to client browser.

I think that it can do with a javascript code that check if a certain value (actual question) change and if change reload the page but I don't know this language and the information that I find was confused.

Can anybody help me?

Many Thanks.

Upvotes: 2

Views: 7677

Answers (3)

LisztLi
LisztLi

Reputation: 242

What you need are coment(http://en.wikipedia.org/wiki/Comet_%28programming%29) and tornado(http://www.tornadoweb.org/)

Upvotes: -1

ComfortablyNumb
ComfortablyNumb

Reputation: 3501

There is no existing way to send a event from server to browser. But you can get your web page polling your server periodically (say every 5 seconds).

The code in javascript/jquery could be like the following

setInterval(function(){
    $.post("your_ajax_handler_url/is_answerd", userId, function(xhr){
       if(xhr.responseText == "answered"){
          location.reload(true);
       }  
    }
 }, 5000);

Upvotes: 5

Timmy O'Mahony
Timmy O'Mahony

Reputation: 53990

That is not at all what signals in Django are for. Signals in django are server side hooks that allow you perform tasks on the server when a certain even happens.

To 'send a refresh' to the browser, you need to use a server-push approach such as Comet. Alternatively you can get your clients to periodically poll the server to look for update.

Here's some links:

How to implement Server push / long polling / comet using PHP and Javascript

How do I implement basic "Long Polling"?

Upvotes: 3

Related Questions