Chapitre 1 : Introduction à Django
Ce livre traite de Django, un « framework » de développement internet qui vous permet de gagner du temps et de développer pour internet avec plaisir. En utilisant Django, vous pouvez concevoir et maintenir des applications internet de grande qualité avec un minimum d’embarras.
Dans le meilleur des cas, le développement internet est un acte créatif et passionnant ; dans le pire des cas, il peut être répétitif et d’un mortel ennui. Django vous permet de vous concentrer sur les aspects agréables — le cœur de votre application internet — tout en vous facilitant la tâche sur les parties répétitives. Pour ce faire, il fournit un haut niveau d’abstraction des modèles courants de développement internet, des raccourcis pour les tâches fréquentes en programmation et des conventions claires sur le « comment » de la résolution de problèmes. Parallèlement à cela, Django tente de ne pas trop s’immiscer dans votre manière de travailler en dehors du champ d’application du « framework ».
Le but de ce livre est de faire de vous un expert Django. L’objectif est double. Premièrement, nous expliquons, en profondeur, ce que fait Django et comment construire des applications internet avec. Deuxièmement, nous aborderons les concepts de plus haut niveau lorsque cela est pertinent, répondant à la question « comment puis-je utiliser concrètement ces outils dans mes propres projets ? ». En lisant ce livre, vous apprendrez les compétences nécessaires pour développer rapidement des sites internet puissants, avec du code propre et facilement maintenable.
Dans ce chapitre, nous proposons une vue d’ensemble de Django.
Qu’est-ce qu’un framework internet ?
Django est représentatif d’une nouvelle génération de « framework » internet. Mais que signifie exactement ce terme ?
Pour répondre à cette question, considérons l’architecture d’une application internet reposant sur le standard CGI (Common Gateway Interface), une façon populaire d’écrire des applications à la fin des années 1990. À cette époque, lorsque vous écriviez une application CGI, vous deviez tout faire par vous même — l’équivalent de préparer un gâteau en partant de rien. Voici par exemple un script CGI simple, écrit en Python, qui affiche les dix derniers livres publiés à partir d’une base de données :
#!/usr/bin/python
import MySQLdb
print "Content-Type: text/html"
print
print "<html><head><title>Livres</title></head>"
print "<body>"
print "<h1>Livres</h1>"
print "<ul>"
connection = MySQLdb.connect(user='moi', passwd='laissezmoientrer', db='ma_base')
cursor = connection.cursor()
cursor.execute("SELECT nom FROM livres ORDER BY pub_date DESC LIMIT 10")
for row in cursor.fetchall():
print "<li>%s</li>" % row[0]
print "</ul>"
print "</body></html>"
connection.close()
Ce code est très simple. Pour commencer, il affiche la ligne “Content-Type”, suivie d’une ligne blanche, comme l’impose le CGI. Il affiche ensuite du code HTML, assure la connexion à une base de données puis exécute une requête qui retourne les dix derniers livres. En bouclant sur ces livres, il génère une liste HMTL non ordonnée. Enfin, il affiche le HTML final puis ferme la connexion à la base de données.
Pour une unique page dynamique comme celle-ci, l’approche « à partir de zéro » n’est pas nécessairement mauvaise. Ce code a l’avantage d’être simple à appréhender — même un développeur débutant peut lire ces 16 lignes de Python et comprendre tout ce qu’il fait, du début à la fin. Il n’y a rien d’autre à apprendre ; pas de code supplémentaire à lire. Il est aussi simple à déployer : il suffit d’enregistrer ce code dans un fichier nommé dernièrespublications.cgi, de placer ce fichier sur un serveur de pages internet puis d’appeler la page depuis un navigateur internet.
Mais lorsque l’application internet devient moins triviale, cette approche n’est plus valable, et vous vous confrontez à de nombreux problèmes :
- Que se passe t-il lorsque plusieurs pages ont besoin de se connecter à la base de données ? Le code relatif à la connexion ne devant certainement pas être dupliqué dans chacun des scripts CGI, la chose la plus pragmatique à faire sera de le factoriser dans une fonction partagée.
- Est-ce qu’un développeur doit réellement se soucier d’afficher la ligne précisant le “Content-Type” et se souvenir de fermer la connexion à la base de données ? Cette intendance réduit la productivité du programmeur et introduit des sources potentielles d’erreurs. Ces tâches relatives au paramétrage et au fonctionnement seraient bien mieux gérées par une infrastructure commune.
- Que se passe t-il lorsque ce code est réutilisé dans de multiples environnements, chacun d’entre eux utilisant une base de données et un mot de passe différent ? À ce stade, des configurations spécifiques à l’environnement deviennent essentielles.
- Que se passe t-il lorsqu’un graphiste ne connaissant pas Python désire modifier l’aspect de la page ? Idéalement, la logique de la page — la récupération des livres depuis la base de données — devrait être séparée de l’affichage du HTML, afin que le graphiste puissent éditer ce dernier sans affecter le précédent.
Ces problèmes sont précisément ceux qu’un framework internet tente de résoudre. Un framework internet fournit une infrastructure de programmation pour vos applications, afin que vous puissiez vous concentrer sur l’écriture d’un code propre, maintenable, sans avoir à réinventer la roue. En résumé, c’est ce que fait Django.
Le patron de conception MVC
Approfondissons un peu à l’aide d’un rapide exemple montrant la différence entre l’approche précédente et celle sous-tendue par l’utilisation d’un « framework » internet. Voici comment vous pourriez écrire le code CGI précédent en utilisant Django :
# models.py (les tables de la base de données)
from django.db import models
class Livre(models.Model):
nom = models.CharField(maxlength=50)
date_publication = models.DateField()
# views.py (la logique métier)
from django.shortcuts import render_to_response
from models import Livre
def derniers_livres(request):
liste_livres = Livre.objects.order_by('-date_publication')[:10]
return render_to_response('derniers_livres.html', {'liste_livres': liste_livres})
# urls.py (la configuration de l'URL)
from django.conf.urls.defaults import *
import views
urlpatterns = patterns('',
(r'derniers/$', views.derniers_livres),
)
# derniers_livres.html (le modèle)
<html><head><title>Livres</title></head>
<body>
<h1>Livres</h1>
<ul>
{% for livre in liste_livres %}
<li>{{ livre.nom }}</li>
{% endfor %}
</ul>
</body></html>
Ne vous souciez pas du « comment cela fonctionne ? » pour l’instant, nous voulons simplement que vous perceviez l’architecture générale. Ce qu’il faut noter ici est la séparation des préoccupations :
- Le fichier models.py contient la description de la table pour la base de données, sous forme de classe Python. On appelle cela un modèle. En utilisant cette classe, vous pouvez créer, récupérer, modifier et effacer les enregistrements de votre base de données en utilisant du code Python basique au lieu d’écrire des déclarations SQL répétitives.
- Le fichier views.py contient la logique métier de la page, dans la fonction derniers_livres(). Cette fonction est appelée une vue.
- Le fichier urls.py précise quelle sera la vue appelée pour un modèle d’URL donné. Dans notre cas, l’URL /derniers/``sera traité par la fonction ``derniers_livres().
- Le fichier derniers_livres.html est un gabarit HTML décrivant l’aspect de la page.
Pris ensemble, ces morceaux suivent vaguement le patron de conception MVC (Modèle-Vue-Contrôleur). En bref, MVC définit un mode de développement de logiciels stipulant que le code de la définition et de l’accès aux données (le modèle) soit distinct de la demande de routage logique (le contrôleur), qui est à son tour séparé de l’interface utilisateur (la vue).
L’avantage majeur d’une telle approche est que les composants sont faiblement couplés. Ceci étant, chaque composant d’une application internet propulsée par Django a un seul objectif et peut être changé indépendamment sans affecter les autres éléments. Par exemple, un développeur peut changer l’URL d’une partie de l’application sans conséquences sur l’implémentation sous-jacente. Un graphiste peut modifier le code HTML d’une page sans avoir à toucher au code Python qui la génère. Un administrateur de base de données peut renommer une table dans la base et spécifier le changement à un seul endroit, au lieu d’avoir à chercher et à modifier une douzaine de fichiers.
Dans ce livre, chaque composant de cette pile à son propre chapitre. Par exemple, le chapitre 3 couvre les vues (« views »), le chapitre 4 aborde les gabarits (« templates »), et le chapitre 5 s’intéresse aux modèles (« models »). Le chapitre 5 traite aussi en profondeur de la philosophie MVC de Django.
L’histoire de Django
Avant de plonger un peu plus dans le code, nous allons prendre le temps de raconter l’origine de Django. Il est utile de comprendre pourquoi ce « framework » a été créé, car la connaissance de son historique mettra en lumière les principes du fonctionnement de Django.
Si vous développez des applications internet depuis quelques temps, vous êtes probablement familier des problèmes présentés dans l’exemple CGI précédent. La voie classique pour un développeur est à peu près celle-ci :
- Écrire une application internet en partant de zéro.
- Écrire à nouveau une application internet en partant de zéro.
- Réaliser que l’application du premier point reprend une bonne partie du code de l’application du second.
- Factoriser le code de manière à ce que l’application 1 partage le code avec l’application 2.
- Répéter les étapes 2-4 plusieurs fois.
- Prendre conscience que vous avez inventé un « framework ».
C’est précisément la façon dont Django lui-même a été créé !
Django a grandi à partir d’applications du monde réel écrites par une équipe de développement à Lawrence, Kansas. Cette application est née à l’automne 2003, lorsque les programmeurs internet du Lawrence Journal-World, Adrian Holovaty et Simon Willison, commencèrent à utiliser Python pour construire leurs applications. L’équipe du Journal en ligne, responsable de la production et de la maintenance de plusieurs sites d’informations locales, évoluaient dans un environnement de développement dicté par les délais journalistiques. Les journalistes (et les décideurs) des sites — incluant LJWorld.com, Lawrence.com et KUsports.com — exigeaient que des fonctionnalités soient ajoutées et que des applications entières soient développées dans un délai très court, souvent avec un préavis de quelques jours ou de quelques heures. Adrian et Simon développèrent donc par nécessité un « framework » de développement afin de gagner du temps — c’était la seule façon de pouvoir construire des applications maintenables dans de tels délais imposés.
À l’été 2005, après avoir développé ce « framework » au point qu’il assurait efficacement le fonctionnement de la plupart des sites de World Online, l’équipe, qui accueillait à présent Jacob Kaplan-Moss, décida de distribuer ce « framework » en tant que logiciel « Open Source ». Ils le libérèrent en juillet 2005 et l’appelèrent Django, du nom du guitariste de jazz Django Reinhardt.
Bien que Django soit à présent un projet « Open Source » ayant des contributeurs à travers le monde, les développeurs historiques de World Online continuent à fournir des directives générales pour l’évolution du « framework » et World Online contribue à d’autres aspects importants tels que le temps salarié, les supports marketing ainsi que l’hébergement et la bande passante pour le site web du projet (http://www.djangoproject.com/).
Cette histoire est pertinente car elle permet d’expliquer deux choses. La première est le « nid douillet » de Django. Parce que Django est né dans l’environnement de la presse, il offre des fonctionnalités (en particulier son interface d’administration, détaillée au chapitre 6) qui sont particulièrement bien adaptées pour les sites gérant du contenu — des sites tel que eBay, craiglist.org ou le washingtonpost.com, qui offrent de l’information dynamique et dirigée par les bases de données (mais ne vous démotivez pas — bien que Django soit particulièrement bon pour le développement de ce type de sites, cela n’exclut pas qu’il soit efficace pour construire tout type de site web dynamique. Il y a une différence entre le fait d’être particulièrement efficace pour certaine chose et d’être inefficace pour d’autres).
Le second point à souligner est la façon dont les origines de Django ont façonné la culture de sa communauté « Open Source ». Puisque Django est issu de code provenant du monde réel plutôt que d’être un exercice académique ou un produit commercial, il est largement axé sur la résolution des problèmes que les développeurs de Django eux-même ont rencontré, et rencontrent encore, lors des développements internet. Par conséquent, Django lui-même est activement amélioré au fil du temps. Les développeurs du « framework » ont tout intérêt à ce que Django fasse gagner du temps aux développeurs, produise des applications aisément maintenables et qui montent bien en charge. Puis les développeurs sont aussi motivés par leur propre désir égoïste de s’épargner du temps et de profiter de leur travail. (Pour le dire franchement, « ils mangent leur propre nourriture pour chien »).
Comment lire ce livre
En écrivant ce livre, nous avons essayé de trouver un équilibre entre la facilité de lecture et l’exhaustivité, avec une priorité pour la facilité de lecture. Le but de notre livre, comme précisé plus avant, est de faire de vous un expert Django et nous pensons que la meilleure façon d’enseigner passe par la prose et une multitude d’exemples, plutôt que de fournir un catalogue exhaustif mais fade des fonctionnalités de Django (selon l’expression consacrée, vous ne pouvez pas attendre de quelqu’un qu’il parle, simplement en lui enseignant l’alphabet).
Ayant ceci à l’esprit, nous vous recommandons de lire les chapitres 1 à 7, dans l’ordre. Ils constituent les fondations de l’utilisation de Django ; Une fois que vous les aurez lus, vous serez en mesure de construire des sites internet fonctionnant grâce à Django. Les chapitres restants, qui détaillent des fonctionnalités spécifiques à Django, peuvent êtres lus dans n’importe quel ordre.
Les annexes servent de références. C’est ici, en complément de la documentation librement disponible sur le site http://www.djangoproject.com/, (ndt : l’auteur se réfère au site officiel. Les non anglophones visiteront http://www.djangoproject-fr.org, site communautaire francophone des utilisateurs de Django) que vous trouverez probablement l’occasion de vous souvenir d’une syntaxe ou de trouver rapidement un résumé des fonctionnalités de certains composants de Django.
Connaissances requises en programmation
Les lecteurs de ce livre doivent comprendre les bases de la programmation procédurale et de la programmation orientée objet : structures de contrôle (if, while, et for), les structures de données (les listes, les hachages/dictionnaires), les variables, les classes, les objets.
Une expérience du développement internet est, comme vous vous en doutez, très utile, mais n’est pas nécessaire à la lecture de ce livre. Tout au long du livre, nous nous efforçons de promouvoir les bonnes pratiques du développement internet pour les développeurs qui ne possèdent pas ce type d’expérience.
Connaissances requises en Python
Fondamentalement, Django est une simple collection de bibliothèques écrites avec le langage de programmation Python. Pour développer un site utilisant Django, vous écrivez du code Python qui utilise ces bibliothèques. Apprendre Django, c’est en quelque sorte apprendre comment programmer en Python et comprendre comment fonctionnent les bibliothèques de Django.
Si vous avez de l’expérience en programmation Python, vous ne devriez pas avoir de problèmes de prise en main. Dans l’ensemble, le code de Django ne présente pas de « magie noire » (c’est à dire, des artifices de programmation dont l’implémentation est difficile à expliquer ou à comprendre). De votre point de vue, apprendre Django se résumera à apprendre les conventions et l’API (ndt : « Application Programming Interface », interface de programmation d’application) de Django.
Si vous n’avez pas d’expérience en programmation Python, vous allez vous régaler. Il est facile à apprendre et son utilisation est un plaisir ! Bien que ce livre ne constitue pas un tutoriel Python complet, il met en lumière ses caractéristiques et ses fonctionnalités lorsque c’est nécessaire, en particulier lorsque le code ne fait pas immédiatement sens. De plus, nous vous recommandons la lecture du tutoriel Python officiel, disponible en ligne à l’adresse http://docs.python.org/tut/. (ndt : vous trouverez une version francophone de ce tutoriel sur le site http://www.olivierberger.org/python/doc/tut/tut.html, pour la version 2.0.1). Nous vous recommandons aussi le livre de Mark Pilgrim, Dive into Python, librement disponible sur le site http://www.diveintopython.org/ et publié en version papier chez Apress. (ndt : la traduction, Plonger au cœur de Python, est disponible sur le site http://diveintopython.adrahon.org/).
Nouvelles fonctionnalités de Django
Comme nous l’avons précisé auparavant, Django est fréquemment amélioré et se verra probablement enrichi de nombreuses fonctionnalités utiles — voir essentielles — après la publication de ce livre. L’objectif des auteurs de ce livre est double :
- s’assurer que le livre soit « résistant au futur » autant que faire ce peut, de façon à ce que tout ce que vous puissiez lire ici restera pertinent dans les futures versions de Django
- mettre à jour ce livre sur son site internet, http://www.djangobook.com/, afin que vous puissiez avoir accès à la dernière et à la meilleure documentation disponible, dès que nous la rédigeons.(ndt : l’auteur parle de la version originale, pour la version Française, http://www.djangobook.com/fr/).
Si vous désirez implémenter quelque chose avec Django qui ne soit pas expliqué dans ce livre, vérifiez la dernière version de celui-ci sur le site mentionné plus avant, ainsi que la documentation officielle de Django.
Obtenir de l’aide
Un des plus grand avantages de Django est sa sympathique et disponible communauté d’utilisateurs. Pour obtenir de l’aide sur n’importe quel aspect de Django — depuis l’installation, l’architecture de l’application ou de la base de données, en passant par le déploiement — n’hésitez pas à poser vos questions en ligne.
- La liste de diffusion des utilisateurs de Django que des centaines d’utilisateurs fréquentent afin de poser et de répondre aux questions. Inscrivez-vous gratuitement sur le site http://www.djangoproject.com/r/django-users.
- Le canal de discussion IRC que les utilisateurs de Django fréquentent dans la joie pour discuter et s’entraider en temps réel. Rejoignez-les en vous connectant sur le canal #django du réseau IRC Freenode.
Et ensuite ?
Dans le chapitre suivant, nous commencerons à utiliser Django, en abordant son installation et son paramétrage initial.
Dernière modification: 2008-10-14 14:27:34.104480