Quoi de plus fastidieux que de réimplémenter encore et encore un CRUD (Create, Retrieve, Update, Delete) ?
Ces opérations élémentaires sont cependant les plus courantes en traitement des données.
Heureusement, de plus en plus de frameworks web offrent la possibilité de les générer à partir du modèle de données : de la requête Sql au Html.
Voyons comment se débrouille Django sur ce terrain !
Introduction
J’ai testé récemment l’admin generator (AG) de Django. C’est un composant important qui fait gagner beaucoup de temps et utilise presque tout le reste du framework.
Nous verrons dans ce billet ce qui le différencie de l’AG symfony d’un point de vue fonctionnel.
Note : dans les exemples je parlerai d’articles, de commentaires et de tags. Ce sont les entités que j’ai choisies pour mes tests. On a une relation 1,n entre article et commentaire et une relation n,n entre article et tag.
Version de Django testée : 1.1
Génération d’une « vraie » application
Alors que symfony génère de manière isolée des CRUD, Django offre une application avec authentification, dashboard avec menus et historique des actions, gestion des utilisateurs/groupes/permissions et fil d’ariane. Le tout dans un design épuré très agréable.
Ajout d’entités liées
Exemple : lorsque l’on crée un article on n’a pas forcément pensé à créer ses tags auparavant. Or c’est à la création/modification de l’article que je veux les lier. Pour éviter des aller-retour, Django ajoute un bouton + permettant d’ajouter des tags sans quitter le formulaire d’article :
Même chose pour les commentaires (relation 1,n) :
Autre solution possible, l’ajout par lot (cette fois avec des sondages et des choix) :
Alternative aux grandes listes déroulantes
En cas de grosse volumétrie, il n’est parfois pas possible de proposer une liste déroulante pour des raisons de performances et d’ergonomie. Django propose un système de sélection reprenant la vue « liste » :
Dans cet exemple il suffit de cliquer sur le titre d’un article pour le sélectionner. Le champ de saisie affichant 1 correspond à l’id de l’article sélectionné : je ne pense pas que ça soit une très bonne idée de l’afficher par défaut.
« Enregistrer sous »
C’est une fonctionnalité simple mais pratique. Prenons un exemple avec des devis : je souhaite créer un devis sans partir de zéro. Il existe en base un devis similaire à celui que je veux établir. Je clique sur ce dernier, puis sur « Enregistrer sous » : le système duplique le devis. C’est une sorte de copier-coller.
Afficher les boutons d’action en haut et en bas
Petit détail, mais une option permet d’accéder aux actions en haut du formulaire. On n’a pas besoin de surchager de template et c’est pratique pour les grands formulaires ou les grandes listes.
Sélecteur de date
Modification dans la liste
Pour certaines entités avec peu d’attributs, ce mode d’édition est apprécié.
Historique des actions
Pour chaque entité, Django enregistre les actions effectuées :
Champ de recherche unique et filtres
La recherche se fait à partir d’un simple champ texte.
Cependant, même si on peut spécifier les attributs dans lesquels chercher, il serait bon d’avoir la possibilité d’effectuer une recherche avancée (qui ressemblerait à la recherche symfony par exemple).
Les filtres sont assez limités et ne semblent utiles que pour les attributs booléens et temporels :
Suppression
Lorsque l’on supprime un objet lié à d’autres objets, on obtient le message suivant :
(il ne manque plus que la traduction de la première phrase…)
Un peu de technique
Côté développement, les moyens de personnalisation ressemblent beaucoup à ceux de symfony.
Les options de génération sont initialisées dans des classes qui correspondent aux generator.yml de symfony. Leur écriture n’est pas beaucoup plus verbeuse grâce à la syntaxe concise de Python (qui ressemble d’ailleurs au Yaml pour les dictionnaires et les tableaux).
Ensuite, pour une personnalisation complète, on retrouve les classes de formulaire (widgets, validation) et la surcharge des actions et des templates.
Conclusion
L’AG (Admin Generator) de Django est de très bonne qualité et j’avoue le préférer à celui de symfony. Avant de rédiger ce billet j’ai comparé point à point leurs fonctionnalités et je me suis vite rendu compte que Django offrait plus de fonctionnalités avec une meilleure ergonomie « out of the box ». La documentation est également très réussie.
Django influencera-t-il symfony sur ce composant qui fait souvent office de démonstration du framework ?
Sylvain Deloux
27 avril 2010
A quand un plugin symfony pour générer une application aussi sexy que celle là ?
providenz
27 avril 2010
Et en plus, ça se customize assez facilement grâce au système de templates
Beleneglorion
11 mai 2010
Article intéressant , mais je pense pouvoir dire sans trop me tromper que ce qu’ont toujours voulu les devs de symfony c’est de fournir une base souple et faisant minimum en laissant la possibilité aux utilisateurs d’améliorer l’outil.
Exemple le versioning/loging c’est sympa mais lourd à gérer, donc il est proposé en plugins ou behavior ce qui permet de d’avoir une application qui reste légère.
l’option de duplication c’est facile a rajouter et ce n’est pas forcément utile et utilisable partout ( tant qu’on a des données en base de données c’est simple quand on a des fichiers a manipulé cela demande en général un traitement spécifique (image avec thumbnails généré a l’upload par exemple ) )
Personnelement je préfère un outils qui en fait un peu moins mais facilement extensible qu’un outil qui fait tout a ma place.
Darkawi
14 octobre 2012
j’ai dévellopé en ptyhon/Django pendant mon stage de fin d’étude(6 mois) et je peux dire qu’il offre beaucoup de fonctionnalités et est très puissant:
-Gestion des requêtes SQL en python
-API
-language de templates
-Interface d’administration
-Gestion des urls
-Gestion des applications
-création des modèles selon les ORM
-séparation du code de l’HTML
J’ai également développé en PHP (2-3 mois) sans framework,c’était assez difficile d’intervenir dans le code sachant que tout était mélangé: HTML,code PHP,Javascript,SQL.
Je ne peux donc pas faire une vraie comparaison entre Django et Symfony mais d’après les différentes comparaison que j’ai pu voir, je pense que Django va être de plus en plus préféré à Symphony.