Minor Swing with Django
Preface
“The only way to go fast, is to go well.”
– Robert C. Martin
Il existe énormément de tutoriaux très bien réalisés qui expliquent ”Comment réaliser une application Django” et autres ”Déployer votre code en 2 minutes”. Ces tutoriels excellent à faire fonctionner une idée en quelques minutes, mais ils ne vous préparent pas à ce qui arrive à la minute 300 : la dette technique, les régressions silencieuses, les équipes qui grandissent, ou le déploiement en production qui échoue à 2h du matin. La plupart de ces tutoriaux présentent le happy path, pas la configuration de l’environnement, les scores de qualité, les processus de déploiement et la maintenance - soit la majorité du travail du développement.
Les quelques idées ci-dessous visent à jeter les bases d’un bon développement, en :
- Survolant l’ensemble des lignes directrices reconnues,
- Maintenant une bonne qualité de code,
- Parcourant les différentes étapes du développement qui mèneront jusqu’au déploiement,
- Maintenant correctement la base de données,
- Permettant à quiconque de reprendre ce qui aura déjà été écrit.
Ces idées ne s’appliquent pas uniquement à Django et à son cadre de travail, ni même au langage Python en particulier. Dans un article de blog, Jeff Atwood, développeur .Net expérimenté, a décrit sa décision de développer Discourse en utilisant le language Ruby (Eghbal 2016, (27)) :
“Getting up and running with a Microsoft stack is just plain too hard for a developer in, say, Argentina, or Nepal, or Bulgaria. Open source operating, languages, and tool chainss are the great equalizer, the basis for the next great generation of programmers all over the world who are going to help us change the world.”
– Jeff Atwood
La même réflexion s’applique sans effort à Python et Django : l’organisation Django Girls a par exemple formé plus de 2000 femmes dans le monde, réparties dans plus de 49 pays. Django n’a pas été développé par cette organisation elle-même, mais étant open source, ce framework peut être téléchargé, utilisé et étudié gratuitement (Eghbal 2016, (28)). Si ces morceaux logiciels n’étaient pas libres et accessibles, ils ne pourraient pas être déconstruits, analysés, étudiés et publiés, ni aider certaines personnes à exercer leur propre métier. L’ouverture de ces langages et frameworks en fait également des modèles bien définis de documentation et de flexibilité.
L’idée est donc de construire un modèle mental, applicable à la majorité des frameworks et aux raisons qui mènent à certains choix.
Pour qui ?
Avant tout, pour moi. Comme le disait le Pr Richard Feynman : ”Si vous ne savez pas expliquer quelque chose simplement, c’est que vous ne l’avez pas compris”. Et comme l’ajoutait Aurélie Jean : “Si personne ne vous pose de questions suite à votre explication, c’est que vous n’avez pas été sufisamment clair” (Jean 2020).
Ensuite, ce livre s’adresse autant :
- Au néophyte qui souhaite se lancer dans le développement Web
- A l’artisan qui a besoin d’un aide-mémoire et qui ne se rappelle plus toujours du bon ordre des paramètres,
- A l’expert qui souhaiterait avoir un aperçu d’une autre technologie que son domaine privilégié de compétences.
Beaucoup de concepts présentés peuvent être oubliés ou restés inconnus jusqu’au moment où ils seront réellement nécessaires : à ce moment-là, pour peu que votre mémoire ait déjà entraperçu le terme, il vous sera plus facile d’y revenir et de l’appliquer. Dans tous les cas, nous supposerons que le lecteur aura déjà une première expérience en programmation. S’il a déjà réalisé des interrogations en base de données, cela facilitera la compréhension de ce qu’il y a “sous le capot”, de même que quelques notions de programmation orientée objets.
Django
Django se présente comme un Framework Web pour perfectionnistes ayant des deadlines (The Web Framework for Perfectionists with Deadlines, n.d.) et suit ces quelques principes (Design Philosophies, n.d.) :
- Faible couplage et forte cohésion, pour que chaque composant dispose de son indépendance, en n’ayant aucune connaissance des autres couches applicatives. Ainsi, le moteur de rendu ne connait absolument rien à l’existence du moteur de base de données, tout comme le système de vues ne sait pas quel moteur de rendu est utilisé.
- Plus de fonctionnalités avec moins de code : chaque application Django doit utiliser le moins de code possible
- Don’t repeat yourself, chaque concept ou morceau de code ne doit être présent qu’à un et un seul endroit de vos dépôts.
- Rapidité du développement, en masquant les aspects fastidieux du développement web actuel.
Cf. https://blog.jetbrains.com/pycharm/2023/11/what-is-the-django-web-framework/
Mis côte à côte, le suivi de ces principes permet une bonne stabilité du projet à moyen et long terme. Sans être parfait, Django offre une énorme flexibilité qui permet de conserver un maximum d’options ouvertes et de facilement expérimenter différentes pistes, jusqu’au moment de prendre une vraie décision. Pour la grande majorité des problèmes rencontrés lors du développement d’une application Web, Django proposera une solution pragmatique, compréhensible et facile à mettre en place : pour tout problème communément connu, vous disposerez d’une solution logique. Il est cependant essentiel de comprendre ses limites, surtout quand on sort des sentiers battus.
Dans la première partie, nous verrons comment partir d’un environnement sain, comment le configurer correctement, comment installer Django de manière isolée et comment démarrer un nouveau projet. Nous verrons rapidement comment gérer les dépendances, les versions et comment appliquer et suivre un score de qualité de notre code. Ces quelques points pourront être appliqués pour n’importe quel langage ou cadre de travail. Nous verrons aussi que la configuration proposée par défaut par le framework n’est pas idéale dans la majorité des cas, car elle mélange configuration et code, expose des informations sensibles, ou ne suit pas les standards de sécurité en production.
Pour cela, nous présenterons différents outils, la rédaction de tests unitaires et d’intégration pour limiter les régressions, les règles de nomenclature et de contrôle du contenu, comment partir d’un squelette plus complet, ainsi que les bonnes étapes à suivre pour arriver à un déploiement rapide et fonctionnel avec peu d’efforts. A la fin de cette partie, vous disposerez d’un code propre et d’un projet fonctionnel, bien qu’encore peu utile.
Dans la deuxième partie, nous aborderons les grands principes de modélisation, en suivant les lignes de conduites du cadre de travail. Nous aborderons les concepts clés qui permettent à une application de rester maintenable, les formulaires, leurs validations, comment gérer les données en entrée, les migrations de données et l’administration.
Dans la troisième partie, nous détaillerons précisément les étapes de déploiement, avec la description et la configuration de l’infrastructure, des exemples concrets de mise à disposition se basant sur une distribution GNU/Linux connue et utilisée en entreprise, sur une Plateform as a Service, ainsi que sur des containeurs. Nous aborderons également la supervision et la mise à jour d’une application existante, en respectant les bonnes pratiques d’administration système.
Dans la quatrième partie, nous aborderons les architectures typées entreprise, les services et les différentes manières de structurer notre application pour faciliter sa gestion et sa maintenance, tout en décrivant différents types de scénarii, en fonction des consommateurs de données.
Dans la cinquième partie, nous mettrons ces concepts en pratique en présentant le développement en pratique de deux applications, avec la description de problèmes rencontrés et la solution qui a été choisie : définition des tables, gestion des utilisateurs, … et mise à disposition.
Pour aller plus loin
Il existe énormément de ressources, autant spécifiques à Django que plus généralistes. Restez curieux, ne vous enclavez pas dans une technologie en particulier et gardez une bonne ouverture d’esprit.
Conventions
Les notes indiquent des anecdotes.
Les tips indiquent des trucs et astuces, ou des raccourcis permettant de gagner du temps.
Les notes importantes indiquent des éléments pouvant rapidement ripper
Les avertissements indiquent un danger ou des conséquences pouvant résulter d’un choix.
Les morceaux de code source seront présentés de la manière suivante :
# <folder>/<fichier>.<extension> (1)
def function(param):
""" (2)
"""
callback() (3)<1> L’emplacement du fichier, si c’est pertinent, présenté sous forme de commentaire, <2> Des commentaires au niveau des fonctions et méthodes, si cela s’avère nécessaire, <3> Un surlignage sur les parties importantes ou récemment modifiées
La plupart des commandes qui seront présentées dans ce livre le seront depuis un shell sous GNU/Linux. Certaines d’entre elles pourraient devoir être adaptées si vous utilisez autre système d’exploitation (macOS ou Microsoft Windows).
Les morceaux de code que vous trouverez ci-dessous seront développés pour Python3.9+ et Django 3.2+. Ils nécessiteront peut-être quelques adaptations pour fonctionner sur une version antérieure.