Makina Blog
Les technologies utilisées dans notre GMAO JOB
JOB est un outil qui répond à des problématiques communes à de nombreux corps de métier dès lors que la maintenance est organisée autour d’une équipe sédentaire et d'intervenants mobiles. Voici la liste des outils et bibliothèques open-source utilisés pour la réalisation de cette application : Python, Django, Twitter Bootstrap, etc… Et à la clé deux nouvelles contributions : django-jsignature et django-db-faker.
Interface utilisateur
Toute l'interface utilisateur a été réalisée avec le framework Twitter Bootstrap et les extensions JavaScript avec JQuery.
Twitter Bootstrap est une collection d'outils particulièrement bien adaptée pour la création d'applications métier. Il offre de nombreux composants permettant de réaliser rapidement des interfaces efficaces et responsives : système de grilles, formulaires, boutons, labels et badges, tooltips, barre de navigation, etc.
JQuery, que l'on ne présente plus, est la boîte à outil indispensable du ninja JavaScript, offrant une API cross-browser qui simplifie la manipulation du DOM HTML, la gestion des animations, des événements utilisateur ou encore la création d'interface Ajax.
Découvrez nos formations Ergonomie IHM, HTML5 / CSS3 et JavaScript.
Framework de développement et base de données
Django, The Web framework for perfectionists with deadlines.
Django est un de nos frameworks de développement préféré. Orienté MVC, très bien adapté pour le développement d'application métier, il peut être utilisé avec les principales bases de données SQL du marché, dont PostgreSQL qui a eu notre préférence pour ce projet.
Makina Corpus se positionne depuis des années comme un acteur majeur sur la scène Django française. Découvrez nos formations Python et Django.
Modules Python et Django intéressants
Pour éviter de réinventer la roue à chacun de nos développements, nous utilisons de nombreux modules issus des communautés Python et Django, parmi lesquels :
- django_xworkflows : Implémentation de workflows associés aux modèles de données Django. Nous l'utilisons dans JOB pour gérer l'intégralité du cycle de vie d'une intervention de maintenance.
- django-modeltranslation : Traduire dynamiquement des champs de contenu d'un modèle Django dans plusieurs langues sans modifier la définition initiale des modèles de classes.
- django-model-utils : Offre des mixins et des outils très utiles pour les modèles de données Django (StatusField et StatusModel, TimeFramedModel, TimeStampedModel, InheritanceManager, PassThroughManager, etc.).
- django-crispy-forms : Rendu amélioré des formulaires Django en utilisant des framework CSS spécialisés tels que Twitter Bootstrap (qui nous intéresse en premier lieu pour ce projet), Foundation, etc.
- django-solo : Implémentation du pattern Singleton dans Django, très utile pour la création d'un panneau de configuration dédié à l'application.
- django-selectable : Création de widget Django avec autocomplétion (basé sur JQuery UI).
- django-tinymce : Intégration dans Django du célèbre éditeur de texte TinyMCE.
- google-api-python-client : Binding Python permettant l'accès aux API Google. Nous l'utilisons dans JOB pour synchroniser le planning des interventions de maintenance avec des comptes Google Agenda.
- django-auth-ldap : Support d'authentification via LDAP pour Django. Nous avons ajouté une synchronisation entre LDAP et Django pour basculer sur l'authentification Django classique en cas de défaillance de l'annuaire.
- xhtml2pdf : Génération de documents au format PDF à partir de templates HTML et d'instructions de mise en page CSS. L'application JOB utilise cette bibliothèque pour générer les rapports d'intervention remis aux clients ainsi que les documents utiles à la facturation.
Pour améliorer les performances de notre application Django :
- django-compressor : Compresser et combiner des ressources JavaScript et CSS.
Et pour faciliter le développement ainsi que le debug :
- south : Migrations de bases de données pour Django.
- django_extensions : Offre des commandes Django très utiles (shell_plus, sqldiff, graph models, print_settings, etc…).
- django-debug-toolbar : Panneau configurable affichant de nombreuses informations sur la requête courante (temps CPU, nombre de requêtes SQL, entêtes HTTP, etc…).
Tests automatisés
… ou comment assurer la maintenance de son application et ajouter sereinement de nouvelles fonctionnalités !
L'ensemble des tests unitaires et fonctionnels de l'application JOB sont rejoués à chaque commit, et si le build ne passe pas les développeurs sont prévenus par email en temps réel avec la sanction à la clé : croissants au prochain petit déj !
Les builds automatiques sont réalisés avec Jenkins, et l'intégration au projet Django est réalisé via django-jenkins.
Un module Django très pratique, factory_boy, permet de créer des jeux de données de tests bien plus faciles à maintenir qu'avec le mécanisme de fixtures disponible dans Django.
Déploiement
Nous déployons les différentes instances de production, de pré-production et de démonstration avec fabric et fabtools. Différentes commandes nous permettent de :
- Déployer une nouvelle instance (configuration serveur web, base de données, configuration django, …);
- Mettre à jour une instance existante;
- Restaurer une sauvegarde (base de données et media).
L'installation des dépendances est réalisée classiquement avec pip dans un virtualenv.
Contributions réalisées dans le cadre du projet
django-jsignature
django-jsignature permet d'utiliser dans Django l'excellent module JQuery jSignature qui permet de capturer une signature manuelle réalisée via le navigateur avec la souris ou dans l'idéal sur un écran tactile. Dans JOB, django-jsignature permet au client de signer un rapport d'intervention qui lui sera transmis dans la foulée par e-mail.
Ce module fournit :
- Un champ et un widget de formulaire utilisable directement dans les formulaires Django,
- Un champ pour les modèles Django qui capture et stocke la signature dans la base de données,
- Un mixin qui met a disposition deux champs : la signature et la date de signature.
django-db-faker
django-db-faker facilite l'anonymisation des données d'une base de données Django, très utile pour monter une instance de démonstration en repartant d'une base contenant des données réelles de production.
Ce module fournit :
- Une classe de base ModelFaker à implémenter dans vos modèles Django pour décrire comment anonymiser tel ou tel champ,
- Des méthodes basiques d'anonymisation (replacers) traitant les cas les plus courants,
- Une gestion des dépendances pour traiter l'anonymisation des modèles dans le bon ordre,
- Des signaux pour réaliser des actions complémentaires avant et après l'anonymisation des données d'un modèle.
Formations associées
Formations Django
Formation Django avancé
À distance (FOAD) Du 9 au 13 décembre 2024
Voir la formationFormations Front end
Formation Développement d'applications JavaScript
À distance (FOAD) Du 20 au 22 novembre 2024
Voir la formationActualités en lien
Utiliser des fonctions PostgreSQL dans des contraintes Django
Cet article vous présente comment utiliser les fonctions et les check constraints
PostgreSQL en tant que contrainte sur vos modèles Django.
Comment migrer vers une version récente de Django ?
Que ce soit pour avoir les dernières fonctionnalités ou les correctifs de sécurité, rester sur une version récente de Django est important pour la pérennité de son projet.
Le projet Agrégateur : fusionner des bases de données Geotrek
Le partage et la diffusion des données font partie des problématiques historiques au cœur du projet Geotrek.