Chapitre 1: Introduction à Django
=================================
Si vous visitez le site Web djangoproject.com en utilisant votre navigateur Web
— ou, en fonction de la décennie pendant laquelle vous lisez ce travail destiné
à être intemporel, en utilisant votre natel, votre agenda éléctronique, votre
chaussure, ou n'importe quelle machine dévouée (superceding) à Internet — vous
trouverez cette explication:
Django est un framework Web Python de haut niveau qui encourage le
développement rapide et une conception propre et pragmatique.
Cette citation est une douce musique — ou un régal pour les yeux, selon qu'on vous
récite ce livre, que vous le lisiez sur papier ou sur un écran géant.
Je vous invite à décomposer ce framework.
Django est un framework Web de haut niveau
-------------------------------------------
Un framework de haut niveau est un logiciel qui réduit la souffrance ressentie
lors de la construction de sites Web dynamiques. Il abstrait les problèmes
courants du dévelopemment Web et fourni des raccourcis pour les tâches de
programmation fréquentes.
Pour plus de clarté, un site Web dynamique est un site dont les pages ne sont
pas simplement des documents HTML déposés sur un serveur de fichier quelconque.
Dans un site dynamique, chaque page est générée par un logiciel informatique —
que l'on appelle aussi une application Web — que vous créez vous, le développeur.
Une application peut, par exemple, récupérer des informations d'une base de
données ou gérer les actions basées sur des entrées utilisateur.
Un bon framework Web aborde ces différents problèmes:
* Il fournit une méthode pour connecter les URLs demandées au code qui gère
les requêtes. En d'autres termes, il vous donne un moyen de choisir quel
code est exécuté par telle URL. Pour l'exemple, vous pourriez dire au
framework « Pour les URL qui ressemblent à /users/joe/, exécute le code
qui affiche le profil de l'utilisateur qui a ce nom ».
* Il rend facile l'affichage, la validation, et le ré-affichage des formulaires
HTML. Les formulaires HTML sont la manière basique de récolter les entrées
des utilisateurs du Web. Un framework Web doit rendre leur affichage
facile et simplifier la gestion fastidieuse du code d'affichage et de
ré-affichage (avec les erreurs mises en évidence).
* Il convertit les données de l'utilisateur dans des structures qui peuvent
être manipulées facilement. Par exemple le framework doit convertir les
formulaires HTML dans des types de données natives au langage de
programmation utilisé.
* Il aide à séparer le contenu de la présentation via un système de gabarits
(templates), pour que vous puissiez changer l'apparence de votre site sans
affecter son contenu et vice-versa.
* Il s'intègre naturellement avec une couche de stockage — comme les base de
données — mais ne nécessite pas forcement une base de données.
* Il vous permet d'être plus productif, à un plus haut niveau d'abstraction,
que si vous deviez travailler directement avec HTTP. Mais il ne vous
empêche pas de pouvoir accèder à ces niveaux plus bas si nécessaire.
* Il reste en dehors de votre chemin, ne vous obligeant pas à laisser les
URL de application se terminer par « .aspx » ou « .php ».
Django fait correctement toutes ces choses — et introduit une quantité de
fonctionnalités qui surpasse ce qu'un framework Web doit faire.
Le framework est écrit en Python, un magnifique langage de programmation,
concis, puissant et de haut niveau. Pour développper un site utilisant Django,
vous écrivez du code Python qui utilise les bibliothèques Django. Bien que ce
livre n'inclut pas un tutoriel Python complet, il met en lumière les
particularités et fonctionnalités de Python, aux endroits appropriés,
particulièrement quand le code n'est pas auto explicatif.
...qui encourage le développement rapide...
-------------------------------------------
En dépit des nombreuses fonctionnalités qu'il propose, un framework Web est sans valeur si il ne vous permet pas de gagner du temps. La philosophie de Django est de faire tout ce qui peut faciliter un dévelopmment hyper rapide. Avec Django, vous contruisez des sites Web en quelques heures, pas des jours; des semaines ou des années.
Ceci est possible en grande partie grâce à Python lui même. Oh, python, comme nous l'aimons, laisse nous faire cette liste:
* Python est un langage interprété, ce qui signifie qui n'y a pas de compilation de code: Il suffit d'écrire votre programme et de l'exécuter. En dévelopmment Web cela signifie que vous pouvez développer votre code et constater immédiatement les résultats en appuyant “Recharger” dans votre navigateur.
* Python est typé dynamiquement, ce qui sgnifie que vous n'avez pas à vous soucier de déclarer le type de donnée de vos variables.
* Pyton a une syntaxe concise et expressive, ce qui signifie que cela prend moins code pour accomplire la même tâche que dans un langage plus verbeux comme Java. Une ligne de python équivalent souvent à 10 lignes de Java. (Qui dit moins de lignes dit aussi moins de bogues.)
* Python offre des fonctionnalités puissante comme l'introspection et la meta-programmation, qui rendent possible d'inspecter et d'ajouter des comportements aux objets durant la phase d'exécution.
Derrière les avantages en productivités inhérentes à Python, Django fait tous les efforts pour encourager un développement rapide. Chaque partie du framework a été conçu avec comme but la productivité. Nous allons voir des exemples de cela partout dans ce livre.
…et une conception propre et pragmatique
----------------------------------------
Finalement, Django maintient volontairement un design propre partout dans son propre code et encourage l'application des meilleurs pratiques de développement Web dans les applications que vous créez.
Cela signifie que si Django était une voiture, il serait une élégante voiture de sport, capable non seulement d'atteindre des vitesses élevées et de tourner sec, mais aussi d'aller loin en ayant des émissions propres.
La philosophie est la suivante: avec Django il est facile de faire les choses de la “bonne” manière.
Spécificement, Django encourage le faible couplage: les différentes pièces de l'application doivent être interchangeables et soivent communiquer entre elles via des API claires et concises.
Par exemple, le système de template ne sait rien du système de base de données, qui ne connait rien de la couche requète/réponse, qui ne sais rien du cache. Chacune de ces couches est séparée et faiblement couplée à l'ensemble. En pratique cela signifie que vous pouvez mélanger et choisir les couches si besoin est.
Django suit l'architecture "Modèle-Vue-Contrôleur" (MVC). En bref, il s'agit d'une manière de développper du logiciel afin que le code définissant et accédant aux données (le Modèle) soit séparé de la logique métier (le Contrôleur), qui est à son tour séparé de l'interface utilisateur (la Vue).
MVC est mieux expliqué par un exemple de ce qu'il ne faut pas faire. Regardez le code PHP suivant: il va chercher une liste de personnes depuis une base de données MySQL et affiche cette liste dans une page HTML simple. (Oui, nous savons que les progammeurs disciplinés peuvent écrire du code PHP propre; nous utilisons juste PHP pour illustrer notre argumentation.)::
Friends of mine
Friends of mine
Bien que ce code soit conceptuellement simple pour les novices — car tout est contenu dans un seul fichier — c'est une mauvaise pratique pour plusieurs raisons:
* La présentation est lié au code. Si un graphiste désire modifier cette page HTML, il ou elle devra modifier ce code, car HTML et PHP sont entrelacé. Par contraste, l'approche MVC de Django encourage la séparation du code et de la présentation. Ainsi la présentation est gouvernée par des gabarits (Templates) et la logique métier vit dans des modules Python. Les programmeurs travail avec du code, et les designers avec HTML.
* Le code de la base de données est lié avec la logique métier. C'est un problème de redondance: Si vous renommer votre base de données ou ses colonnes, vous devrez réécrire votre SQL.
* Par contraste, l'approche MVC de Django encourage une seule couche abstraite d'accès aux données qui est responsable de tout accès aux données. Dans le cas de Django, la couche d'accès aux données connais le nom vos tables et de vos colonnes et vous laisse ainsi exécuter les requètes SQL via Python au lieu d'écrire du SQL manuellement. Cela signifie que si les noms de vos tables changent, vos devrez les changer dans un seul endroit — dans la définition de votre modèle — au lieu de le faire à travers tout votre code pour chaque instruction SQL.
* L'URL est couplé au code. Si ce fichier PHP existe comme /foo/index.php, il sera exécuté pour chaque requète à cette adresse. Mais si ce que vous voulez que ce code soit exécuté pour les requètes /bar/ et /baz/? Vous devrez mettre en place des inclusions ou des règles de ré-écriture, qui deviendront rapidemment ingérables.
Par contrate, Django découple les URLs du code de réponse afin que vous puissiez changer les URL pour un morceau de code donné.
* Les paramètres de connexion à la base de donnés sont codés en dur. C'est malpropre de spécifier des informations de connexion — le serveur, le nom d'utilisateur et le mot de passe — dans le code car il s'agit de configuration et non de logique de programmation. En outre, cet exemple code en dur le fait que la base de données utilisée est MySQL.
Par contraste, Django a une place unique pour stocker la configuration. La couche d'accès aux données est abstraite de tel manière qu'il soit facile de changer de serveur de base de données (par exemple: de MySQL à PostgreSQL).
Ce que Django ne fait pas
-------------------------
Bien sûr, nous voulons que ce livre soit juste et équilibré. Aillant ceci en tête, nous devrions être honnête sur ce que Django ne fait pas:
* Nourrir votre chat
* Lire les besoins de votre projet dans votre esprit et les implanter d'une façon soigeusement planifiée afin de faire croire à votre patron que vous n'êtes pas chez vous en train de regarder "Le Juste Prix".
* Un peu plus sérieusement, Django n'inverse pas l'effet du réchauffement global.
Dans quel but Django a-t-il été développé
Django est profondémment enraciné dans les problèmes et les solutions du monde réel. Il ne pas fut créé pour être commercialisé et vendu aux développeurs. Il ne fut pas non plus créé comme un exercice académique élaboré durant le temps libre d'un hobbiste. Il fut construit dès le premier jour pour résoudre les problèmes courants d'une équipe de développement Web professionel.
Il commença fin 2003, pour le journal d'une petite ville du Kansas: Lawrence.
Pour une raison ou pour une autre, Le journal "The Lawrence Journal-World" est parvenu à attirer une poignée de talentueux designers et développeurs Web au début des années 2000. Le groupe de travail Web du journal, World Online, devint rapidemment l'un des plus innovant groupe de travail journalistique Web dans le monde. Ces trois principaux sites, LJWorld.com (nouvelles), Lawrence.com (divertisement/musique), et KUsports.com (sports junior), commencèrent à gagner récompense après récompense dans l'industrie du journalisme. Ces innovations furent nombreuses, par exemple:
* Le site de divertissement le plus localement impliqué à travers le monde, Lawrence.com, qui mélange les données et les évènements locaux, les groupes, les restaurants, les "drink" speciaux, des chansons téléchargeables et des nouvelles au format standard (traditional-format).
* Une section de LJWorld.com qui a traité les petis joueurs locaux comme si il étaient les "New York Yankees" — leur fournissant à chacun une page personnel liée aux données météorologiques pour afficher des prévisions des jeux, fournissant un panorama à 360° pour chaque terrain de jeu à proximité et alertant les parents via SMS quand les jeux sont annulés.
* Des alertes SMS pour les match de basketball et de football de l'université du Kansas, qui permet aux fans de modifier les scores et les statistiques durant le jeu, et un second système qui utilise des algorithme d'intelligence artificielle pour laisser les fans envoyer des textes complet au système de base de donnés ("Combien de points giddens a ?" ou "points gidden")
* Une base de données détaillée des statistiques de tous les matches de football et de basketball du collègue dont vous auriez besoin, inculant un moyen de comparer deux/plusieurs joueurs ou équipes dans le NCAA (National Collegiate Athletic Association).
* Fournir des blogs aux membres de la communauté en mettant en évidence le travail d'écriture de cette communautée — les blogs étaient tendance à l'époque.
Les experts en journalisme à travers le monde designèrent World Online comme un exemple du journalisme du futur. Le New York Times publia une histoire de l'entreprise à la première page de la section business; la radio publique nationale fit une série de deux jours à ce sujet. Rob Curley, Le rédacteur en chef de World Online, parla presque toutes les semaines dans des conférences journalistique à travers le monde, présentant les idées innovantes de World Online et les fonctionnalités du site. Dans une industrie morne et démodée, résistante aux changements, World online faisait office d'exception rare.
Le succès de World Online doit beaucoup au technologies derrière ses sites, et à la philosophie que les programmeurs sont aussi important dans la création journalistique de qualité au 21ème siècle que les journalistes eux-même.
C'est pourquoi Django fut développé: les développeurs de World Online avaient besoin de développer facilement des sites Web complexes basés sur des bases de données.
Fin 2003, les deux développeurs de World Online, Adrian Holovaty et Simon Willison, décidèrent de créer un framwork. Ils choisirent d'utiliser Python, un langage dont ils étaient récemment tombé amoureux. Après avoir exploré (est être déçu) les bibliothèques de programmation Web disponibles, ils commencèrent à créer Django.
Deux ans plus tard, durant l'été 2005, après avoir développé Django jusqu'à un point où il était utilisé efficacement par la plupart des sites de World Online, l'équipe de World Oline, qui incluait maintenant Jacob Kaplan-Moss, decida que ça serait une bonne idée de rendre le framework open source. De cette manière, ils participraient à la communauté, recevraient des améliorations gratuites de développeurs externes, et généreraient du bruit pour leurs CMS commercial, Elligton (http://www.ellingtoncms.com/). Django fut ouvert à la communauté en juillet 2005 et devint rapidemment populaire. Bien que Django soit maintenant un projet open source avec des contributeurs à travers le monde, les développeurs originaux de World Online continuent à fournir une direction pour le développement du framework, et World Online contribue à d'autre aspects en fournissant du temps, du matérial marketing, de la bande passante et de l'hébérgement pour le site du framework (http://www.djangoproject.com/).
Qui utilise Django?
-------------------
Les développeurs Web à travers le monde utilisent Django. Quelques exemples spécifiques:
* World Online, bien sur, continue d'utiliser Django pour tous ces sites Web, aussi bien en interne que pour ces clients commerciaux. Quelques un des sites Django sont:
* http://www.ljworld.com/
* http://www.lawrence.com/
* http://www.6newslawrence.com/
* http://www.visitlawrence.com/
* http://www.lawrencechamber.com/
* http://www2.kusports.com/stats/
* Le site du Washington Post, washingtonpost.com, utilise Django pour ces projets de base de données et pour des parties variées de fonctionnalités d'un bout à l'autre du site. Quelques exemples:
* La base données du congret U.S., http://projects.washingtonpost.com/congress/
* L'annuaire du personnel et des fonctions qui laisse des lecteurs contacter des journalistes, apparaissant comme liens sur la plupart des articles.
* Les visages des tués: http://projects.washingtonpost.com/fallen/
* Chicagocrime.org, une base de données des crimes constatés dans Chicago librement naviguable et une des première application composite utilisant Google Maps, fut développée avec Django.
* Tabblo.com, un site de partage de photo innovant, utilisant Django. Le site vous laisse mettre ensembles des photos pour créer des pages qui raconte des histroires.
* Texasgigs.com, un site de musique locale, Texas, fut écrit avec Django.
* Grono.net un site polonais de réseautage social, commenca en remplacant sont code Java avec Django. Ils trouvèrent non seulement qu'il est plus rapide (et plus amusant) de développer en Django mais également que les performances étaient meilleures en utilisant moins de matériel.
* Traincheck.com fut développé en Django. Le site vous laisse envoyer des SMS afin d'obtenir les horraires de train pour votre emplacement actuel.
Une liste à jour de dizaines de sites qui utilisent Django est disponible ici: http://code.djangoproject.com/wiki/DjangoPoweredSites
About this book
---------------
Le but de ce livre est d'expliquer toutes les choses que Django fait et de faire de vous un expert à son utilisation.
En lisant ce livre, vous allez apprendre la qualifications nécessaires pour développer rapidemment de puissants sites Web, avec du code propre et facile à maintenir.