J'écris un système de sauvegarde en Python, avec un frontal Django. J'ai décidé d'implémenter la planification d'une manière un peu étrange - le client interrogera le serveur (toutes les 10 minutes environ), pour une liste des sauvegardes qui ont besoin de faire. Le serveur ne répond que lorsque l'heure de la sauvegarde est atteinte. C'est de garder la plate-forme du système indépendant - de sorte que je ne compte pas sur cronjobs ou similaires. Par conséquent, le frontal Django (qui expose une API XML-RPC) doit stocker la planification dans une base de données et interpréter cette planification pour décider si un client doit démarrer ou non.Quelle est la meilleure façon de représenter une planification dans une base de données, via Python/Django?
Actuellement, le planning est stocké en utilisant 3 champs: jours, heures et minutes. Ce sont des listes d'entiers séparés par des virgules, représentant les jours de la semaine (0-6), les heures du jour (0-23) et les minutes de l'heure (0-59). Décider si un client doit commencer à sauvegarder ou non est une opération horriblement inefficace - Python doit boucler tous les jours depuis 7 jours dans le passé, puis les heures, puis les minutes. J'ai fait quelques optimisations pour m'assurer qu'il ne boucle pas trop - mais quand même!
Cela fonctionne relativement bien, bien que la mise en œuvre soit assez moche. Le problème que j'ai est comment afficher et interpréter cette information via le formulaire HTML sur le front-end. Actuellement, j'ai juste d'énormes listes de champs à sélection multiple, qui évidemment ne fonctionnent pas bien.
Quelqu'un peut-il suggérer une méthode différente pour mettre en œuvre le calendrier qui serait plus efficace, et aussi plus facile à représenter dans un formulaire HTML?
Pourriez-vous clarifier un peu le scénario? Qu'est-ce qui est sauvegardé - les données sur le client? Y a-t-il une raison pour laquelle vous ne stockez pas simplement la prochaine date de sauvegarde dans la base de données en tant que datetime? –
Ou l'intervalle de sauvegarde en tant que timedelta? Si vous avez sauvegardé l'heure de la dernière sauvegarde, et le timedelta requis, le calcul serait un jeu d'enfant. –
Je ne sais pas pourquoi je n'y ai pas pensé. J'allais chercher une syntaxe similaire à celle d'un cron - et j'étais complètement coincé sur ce chemin. Le plan consiste maintenant à demander à l'utilisateur la prochaine date/heure d'exécution et à l'enregistrer avec le delta. Je peux alors utiliser un joli widget datepicker JQuery UI :). Merci pour votre aide! –