web-dev-qa-db-fra.com

Comment recharger automatiquement Django lorsque les fichiers changent?

Comment surveiller automatiquement les fichiers .py, .js et autres fichiers de code source pour redémarrer une application Django (ou toute autre d'ailleurs) et actualiser le navigateur lorsque la source change? Ceci est possible dans = Rails using guard, dans les applications JS utilisant grunt-contrib-watch et le plugin de navigateur livereload qui l'accompagne. Comment puis-je le faire pour Python les applications Web telles que Django?)

Je démarre mon Django serveur avec

foreman start

voici mon Procfile:

web: newrelic-admin run-program gunicorn app.wsgi

comme suggéré par les documents Heroku/Newrelic ou l'habituel

python manage.py runserver

La méthode runserver redémarre le serveur sur les changements de source .py, mais pas le navigateur et ne surveille pas les autres fichiers - je pourrais exécuter la garde à côté, mais j'ai deux processus à gérer, tandis que grunt ou rake offrent des interfaces unifiées. Je me demande quelle est la façon recommandée de le faire parmi les développeurs Python?

Je n'ai pu trouver aucune documentation détaillée et complète à ce sujet - seulement des discussions incomplètes ici et .

16
metakermit

Vous n'avez pas besoin d'une extension de navigateur pour effectuer des rafraîchissements automatiques. Jetez un œil à https://github.com/tjwalch/Django-livereload-server .

J'ai posté une réponse plus détaillée à ce sujet sur https://stackoverflow.com/a/36961244/2950621

Il fonctionne en utilisant une commande manage.py (serveur) pour surveiller vos fichiers .js et autres fichiers statiques. Le serveur envoie un signal au navigateur via des websockets. Il y a du code côté client injecté sur chaque page. Le code injecté répond au signal et rafraîchit le navigateur.

21
nmgeek

Installez cette application Django:

pip install Django-livesync

Sur votre Django ajoutez quelque chose comme:

INSTALLED_APPS = (
    '...',
    'livesync',
    'Django.contrib.staticfiles',
    '...',
)

MIDDLEWARE_CLASSES = (
    'livesync.core.middleware.DjangoLiveSyncMiddleware',
)

Attention à enregistrer 'livesync' avant 'Django.contrib.staticfiles' si vous l'utilisez.

Maintenant, démarrez simplement votre serveur de développement:

python manage.py runserver

Vérifiez cela pour plus de détails: https://github.com/fabiogibson/Django-livesync

6
Fábio Gibson

Frustré par tous les rafraîchissements explicites, j'ai créé une extension de navigateur, pour Firefox et Chrome, pour automatiser cela. L'extension fonctionne avec une application Django que vous ajoutez à votre liste d'applications dans INSTALLED_APPS. Vous pouvez en savoir plus sur le github repo .

Bien que le dépôt ait le code source entier, les extensions sont également disponibles dans la boutique en ligne respective. Recherchez simplement "Django Auto Refresh". Avec ceux-ci, il vous suffit de copier l'application dans le dossier de notre projet et de l'inclure via INSTALLED_APPS. Je voulais ajouter un script de configuration pip, mais je n'ai pas trouvé le temps de le faire.

HTH. Toutes mes excuses si cela ressemble à une auto-promotion.

3
Hari Mahadevan

En utilisant python manage.py runserver est ce qui est le plus utilisé. Vous devrez utiliser un autre outil comme: http://livejs.com/ pour rafraîchir le navigateur lui-même puisque Django n'en est vraiment pas conscient.

3
stormlifter