Django-fr

Forum

#1 06-05-2014 13:47:56

frankynov
Membre
Inscription : 11-04-2014
Messages : 6

Simple fonctionnalité Ajax et Django

Bonjour à tous,

Si vous avez vu mes autres posts, vous avez sûrement remarqué que je suis en train de réaliser un petit projet sympathique de gestion de pipeline pour un laboratoire scientifique, en Django.
J'ai une petite question pour vous, champions du web wink
Voici une page HTML que j'utilise (excusez le design, c'est mon premier site web tongue) :

485029Capturedcran20140505150514.jpg

J'ai connecté mon serveur Django au pipeline (le réseau de tâches scientifiques) avec ZMQ.
L'idée de cette page web est de recevoir des messages des autres machines et de les afficher de manière brute. En console, cela fonctionne et voici ce que j'ai dans mon views.py :

def forwarder_logs(request):
    message_listener()
    return render(request, 'forwarder_logs.html')

et la méthode message_listener() :
Je me suis inspiré de ce code :
https://github.com/sdiehl/zeromq-chat/b … t/views.py

def message_listener():
    print "Entering message listener"
    import zmq
    context_zmq = zmq.Context()
    try:
        socketReceiver = context_zmq.socket(zmq.SUB)
        socketReceiver.setsockopt(zmq.SUBSCRIBE, '')
        socketReceiver.connect("tcp://localhost:5000")

        while True:
            message_received = socketReceiver.recv()
            print message_received
            #socketio.send({'message': message_received}) # La je sèche...
    except (TypeError, zmq.core.error.ZMQError), f:
        print "ERROR trying to receive ! Reason : " + str(f)

En console, j'ai ceci :

Django version 1.6.2, using settings 'webserver_epic.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Entering message listener
Message aleatoire : 52
Message aleatoire : 53
Message aleatoire : 28
Message aleatoire : 4
Message aleatoire : 22

Le problème :

Ces messages s'affichent en console. Mais j'aimerais les envoyer directement dans mon template HTML, et que ces messages s'affichent successivement dans mon petit cadre, sans rafraichissement de la part de l'utilisateur.
D'autre part, avec le fonctionnement courant, Django reste bloqué dans mon "while True", ce qui fait qu'il n'atteint pas la méthode "render" et donc la page HTML ne s'affiche pas.

On m'a conseillé d'utiliser de l'Ajax et du JQuery, mais je suis un peu perdu dans l'usage de ces technos. Certains exemples (comme ceux d'un chat - 'tchat') utilisent une méthode de mise à jour en temps réel, mais ça me semble lourd, surtout pour ce que je veux faire.
Une piste, il semblerait qu'il soit possible d'envoyer une URL en ajax, cette url qui serait décodée par la view qui renverrait uniquement le contenu du message. Je peux me permettre de mettre un timer fixé à 3 secondes pour le rafraîchissement par exemple. Même si le temps réel est un plus.

Pour résumer, le problème serait :

Comment peut-on envoyer plusieurs fois une variable depuis une vue Django dans un template sans rafraîchir la page

Auriez-vous une idée ?

Merci !

Dernière modification par frankynov (06-05-2014 13:52:26)

Hors ligne

#2 13-07-2014 20:34:21

vache67
Membre
Inscription : 27-11-2012
Messages : 12

Re : Simple fonctionnalité Ajax et Django

C'est l'inverse qui doit se produire...

C'est la template, ou plutot un script javascript (ajax) qui doit redemander tes données au serveur

Hors ligne

Pied de page des forums