2007-01-13

Django Book : traduction du premier chapitre

Sur une suggestion de Yoan j'ai commencé à traduire le Django Book. Je vous livre ici une proposition de traduction du premier chapitre. Cela est encore un peu tôt pour faire cette traduction étant donné que le livre n'est pas encore dans un état stable. Adrian Holovaty, un des développeur principal du projet, m'a demandé d'attendre un mois ou deux avant de commencer ce travail. Mais comme j'était déjà en très bon chemin sur ce premier chapitre, j'ai décidé de le terminer et de le publier.

Télécharger la dernière version du premier chapitre au format reStructuredText. Si vous désirez apporter des corrections, veuillez utiliser ce fichier.

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 quel machine dévouée (superceding) à Internet — vous trouverez cette explication:

“Django est un framework Web Python de haut niveau qui encourage le dévelppement rapide et une conception propre et pragmatique.”

Cette citation est une douce musique — ou un régal pour les yeux, selon que l'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 racourcis pour les tâches de programmation fréquentes.

Pour plus de clareté, un site Web dynamique est un site dont les pages ne sont pas simpelment des documents HTML déposés sur un serveur de fichier quelquonque. Dans un site dynamique, chaque page est générée par un logiciel informatique — que l'on apelle 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ée sur des entrées utilisateur.

Un bon framework Web aborde ces différents problèmes:

  • Il fourni une méthode pour connecter les URLs demandées sur le code qui gère les requètes. En d'autre termes, il vous donne un moyen de choisir quel code est exécuté par tel URL. Pour l'exemple, vous pourriez dire au framework “Pour les URLs qui ressemble à /users/joe/, exécute le code qui affiche le profil de l'utilisateur qui a ce nom.”
  • Il rend facile d'afficher, de valider, et de ré-afficher 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 simplifer la gestion fastidieuse du code d'affichage et de ré-affichage (avec les erreurs mise en évidence).
  • Il converti 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 native au langage de programmation utilisé.
  • Il aide à séparer le contenu de la présentation via un système de gabarits (template), 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 travaillez 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 URLs 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 magnigique 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'inclu pas un tutorial 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.):

<html>
<head><title>Friends of mine</title></head>
<body>

<h3>Friends of mine</h3>

<ul>

<?php
$connection = @mysql_connect("localhost", "my_username", "my_pass");
mysql_select_db("my_database");
$people = mysql_query("SELECT name, age FROM friends");
while ( $person = mysql_fetch_array($people, MYSQL_ASSOC) ) {
?>
<li>
<?php echo $person['name'] ?> is <?php echo $person['age'] ?> years old.
</li>
<?php } ?>

</ul>

</body>
</html>
    

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:
  • 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.