2017-10-14 5 views
-1

Je construis une application, où je dois récupérer des données d'une API et mettre à jour tous les modèles avec ces données toutes les quelques minutes.Django - Mettre à jour un modèle toutes les quelques minutes

Quelle serait une manière propre d'accomplir quelque chose comme ceci?

+1

Ecrivez une commande de gestion et programmez-la en utilisant cron ou similaire. – Selcuk

+1

commande de gestion + [céleri beat] (http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html) en tant que cron scheduler – efkin

+1

Si c'est ce que vous devez faire, vous pouvez vérifier si votre architecture est la meilleure. J'envisagerais d'interroger l'API à la demande et de mettre en mémoire cache les résultats en mémoire soit en utilisant le système de mise en cache de django, soit en utilisant un vernis ou un sth similaire. – schwobaseggl

Répondre

2

Eh bien, c'est une question assez ouverte.

Vous aurez besoin de créer une tâche qui s'exécute toutes les quelques minutes, vous pouvez le faire avec Celery. Celery a une tâche schedluer http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html qui va lancer une certaine fonction à un temps configuré semblable à un crontab

La tâche alors irait chercher les données, http://docs.python-requests.org/en/master/ est une très bonne bibliothèque pour faire des demandes http. Et enfin, mais non moins important, vous devrez sérialiser les données récupérées et les enregistrer dans votre modèle. Les capacités de sérialisation du framework de repos Django sont un bon point de départ, mais si la structure des données est assez simple, vous pouvez simplement utiliser la librairie JSON python json.loads (data) et créer une fonction traduisant les champs de l'API vers les champs du modèle. En passant, je suppose une API REST.

0

Vous pouvez utiliser un outil de gestion des tâches qui a la fonction d'exécuter des tâches périodiques dans les intervalles que vous spécifiez, par exemple Periodic Tasks dans Celery.

En outre, si vous exécutez votre code sur un système de type Unix, vous pouvez vous en tenir à la fonctionnalité core django. Il suffit d'écrire votre fonctionnalité en tant que Django Management Command et définir un cronjob pour l'exécuter dans votre intervalle préféré.