Fantomas’side

Weblog open-source

Le temps des releases : django-livereload

Lors de la refonte du site, j'ai découvert l'utilisation de Gulp et de LiveReload, qui permettent de se passer de rafraîchir constamment son navigateur lorsqu'on intègre du HTML, CSS ou JavaScript. En effet lorsque une modification est enregistrée sur ces types de fichiers, le navigateur reçoit un signal lui indiquant de recharger soit la ressource, soit l'intégralité de la page.

Pas mal, mais pas encore assez satisfaisant pour moi, car j'édite aussi principalement des fichiers Python lorsque je développe sous Django, et j'aurais aimé aussi profiter du rechargement automatique du navigateur lorsque que j'édite du code. Malheureusement ce n'était pas aussi simple que cela...

Sous Django avec le serveur développement, les fichiers Python du projet sont déjà surveillés, et dès qu'une modification est détectée sur ces fichiers, le serveur redémarre pour prendre en compte la modification.

Initiative louable, mais qui complique grandement la tâche, car si je surveille aussi ces fichiers avec Gulp, le signal de rechargement sera émit et reçu par le navigateur avant que le serveur de développement Django ne soit totalement rechargé et prêt. Résultat, le navigateur n'arrive pas à recharger, je me retrouve avec une page vide et cela devient contre-productif.

Ce problème à priori peut être résolu au niveau du serveur de développement Django en utilisant des sockets persistantes et à l'heure où j'écris ces lignes un patch est dans l'attente d'intégration : https://code.djangoproject.com/ticket/18855

C'est pour toutes ces raisons que j'ai créé et publié django-livereload. Grâce à cette application qui modifie le serveur de développement, vous pouvez désormais profiter du rechargement automatique de la page en cours quand vos fichiers Python sont modifiés.

Comment ca marche ? Rappelez-vous, le serveur de développement se recharge déjà quand un fichier Python est modifié, et bien quand le serveur est totalement rechargé, une requête de rechargement est émis vers le serveur LiveReload qui lui se chargera de dispatcher la requête vers le navigateur.

En effet après quelques recherches, j'ai compris que les logiciels comme Gulp ou Grunt, se basaient sur le projet tiny-lr lorsqu'il fallait utiliser un serveur LiveReload, hors tiny-lr fournis une API en HTTP pour pouvoir contrôler le rechargement des fichiers. Ce qui dans notre cas est l'idéal.

Pour contribuer, voici l'adresse du projet : https://github.com/Fantomas42/django-livereload