Cours sur la programmation web avec python

Développez votre site web avec le framework Django
Sommaire
Lire aussi .. 3
Développez votre site web avec le framework Django .. 5
Partie 1 : Présentation de Django . 5
Créez vos applications web avec Django . 6
Qu'est-ce qu'un framework ? 6
Quels sont les avantages d'un framework ? 6
Quels sont les désavantages d'un framework ? . 6
Qu'est-ce que Django ? .. 6

Pourquoi ce succès ? .. 7
Une communauté à votre service . 7
Téléchargement et installation 7
Linux et Mac OS . 7
Windows . 8
Vérification de l'installation 9
En résumé . 9
Le fonctionnement de Django .. 10

Un peu de théorie : l'architecture MVC 10
La spécificité de Django : le modèle MVT .. 10 Projets et applications .. 11
En résumé .. 12
Gestion d'un projet . 13
Créons notre premier projet .. 13
Configurez votre projet . 14
Créons notre première application . 16
En résumé .. 17

Les bases de données et Django .. 18
Une base de données, c'est quoi ? 18
Le langage SQL et les gestionnaires de base de données 18
La magie des ORM 19
Le principe des clés étrangères .. 20
En résumé .. 21
Partie 2 : Premiers pas 22
Votre première page grâce aux vues 22

Hello World ! .. 22
La gestion des vues .. 22
Routage d'URL : comment j'accède à ma vue ? . 23
Organiser proprement vos URL .. 25
Comment procède-t-on ? 25
Passer des arguments à vos vues . 27
Des réponses spéciales .. 28
Simuler une page non trouvée . 28

Rediriger l'utilisateur .. 29
En résumé .. 30
Les templates 32
Lier template et vue 32
Affichons nos variables à l'utilisateur 34
Affichage d'une variable .. 34
Les filtres . 34
Manipulons nos données avec les tags .. 35

Les conditions : {% if %} .. 35
Les boucles : {% for %} 36
Le tag {% block %} . 37
Les liens vers les vues : {% url %} . 39
Les commentaires : {% comment %} 39
Ajoutons des fichiers statiques . 40
En résumé .. 41
Les modèles .. 42

Créer un modèle .. 42
Jouons avec des données . 43
Les liaisons entre modèles . 47
Les modèles dans les vues 52
Afficher les articles du blog 52
Afficher un article précis .. 54
En résumé .. 56
L'administration 57

Mise en place de l'administration 57
Les modules django.contrib .. 57
Accédons à cette administration ! .. 57
Première prise en main 59
Administrons nos propres modèles 61
Personnalisons l'administration 62
Modifier l'aspect des listes . 63
Modifier le formulaire d'édition . 67

Sommaire
Retour sur notre problème de slug . 69
En résumé .. 70
Les formulaires . 70
Créer un formulaire 71
Utiliser un formulaire dans une vue 72
Créons nos propres règles de validation . 74
Des formulaires à partir de modèles . 77

En résumé .. 81
La gestion des fichiers . 82
Enregistrer une image .. 82
Afficher une image . 83
Encore plus loin 85
En résumé .. 86
TP : un raccourcisseur d'URL .. 86
Cahier des charges 87

Correction 88
Partie 3 : Techniques avancées .. 93
Les vues génériques . 93
Premiers pas avec des pages statiques . 93
Lister et afficher des données .. 94
Une liste d'objets en quelques lignes avec ListView . 94
Afficher un article via DetailView . 98
Agir sur les données . 99

CreateView . 99
UpdateView . 100
DeleteView .. 103
En résumé 104
Techniques avancées dans les modèles . 105
Les requêtes complexes avec Q .. 106
L'agrégation . 108 L'héritage de modèles 110
Les modèles parents abstraits 110

Les modèles parents classiques 111
Les modèles proxy .. 112
L'application ContentType 113
En résumé 116
Simplifions nos templates : filtres, tags et contextes .. 117
Préparation du terrain : architecture des filtres et tags .. 117
Personnaliser l'affichage de données avec nos propres filtres . 118
Un premier exemple de filtre sans argument .. 118

Un filtre avec arguments .. 120
Les contextes de templates 122
Un exemple maladroit : afficher la date sur toutes nos pages .. 123
Factorisons encore et toujours .. 123
Des structures plus complexes : les custom tags 125
Première étape : la fonction de compilation 126
Passage de variable dans notre tag 129
Les simple tags . 131

Quelques points à ne pas négliger .. 131
En résumé 132
Les signaux et middlewares 133
Notifiez avec les signaux .. 133
Contrôlez tout avec les middlewares . 136
En résumé 139
Partie 4 : Des outils supplémentaires . 140
Les utilisateurs .. 140

Commençons par la base 140
L'utilisateur .. 140
Les mots de passe .. 141
Étendre le modèle User 142
Passons aux vues 143
La connexion .. 143
La déconnexion . 144
En général 145

Les vues génériques .. 146
Se connecter .. 146
Se déconnecter . 147
Se déconnecter puis se connecter .. 147
Changer le mot de passe . 147
Confirmation du changement de mot de passe 147
Demande de réinitialisation du mot de passe 148
Confirmation de demande de réinitialisation du mot de passe . 148

Réinitialiser le mot de passe .. 148
Confirmation de la réinitialisation du mot de passe . 149
Les permissions et les groupes . 149
Les permissions 149
Les groupes . 151
En résumé 151
Les messages 151
Les bases . 152

Lire aussi
Dans les détails . 153
En résumé 154
La mise en cache . 155
Cachez-vous ! 155
Dans des fichiers .. 155
Dans la mémoire .. 155
Dans la base de données 156

En utilisant Memcached 156
Pour le développement . 157
Quand les données jouent à cache-cache .. 157
Cache par vue 157
Dans les templates .. 158
La mise en cache de bas niveau .. 158
En résumé 160
La pagination .. 161

Exerçons-nous en console .. 161
Utilisation concrète dans une vue 163
En résumé 165
L'internationalisation 165
Qu'est-ce que le i18n et comment s'en servir ? 166
Traduire les chaînes dans nos vues et modèles .. 169
Cas des modèles . 172
Traduire les chaînes dans nos templates . 172

Le tag {% trans %} 173
Le tag {% blocktrans %} .. 173
Aidez les traducteurs en laissant des notes ! . 174
Sortez vos dictionnaires, place à la traduction ! 175
Génération des fichiers .po . 175
Génération des fichiers .mo 177
Le changement de langue 177
En résumé 178

Les tests unitaires 178
Nos premiers tests .. 179
Testons des vues . 181
En résumé 183
Ouverture vers de nouveaux horizons : django.contrib 183
Vers l'infini et au-delà . 184
Dynamisons nos pages statiques avec flatpages ! . 185
Installation du module 185

Gestion et affichage des pages . 186
Lister les pages statiques disponibles 187 Rendons nos données plus lisibles avec humanize 188 apnumber . 188 intcomma .. 188 intword 188 naturalday . 189 naturaltime .. 189 ordinal . 190 En résumé 190
Partie 5 : Annexes 191
Déployer votre application en production . 191
Le déploiement .. 191
Gardez un œil sur le projet .. 193
Activer l'envoi d'e-mails . 193
Quelques options utiles… 194

Hébergeurs supportant Django . 195
En résumé 195
L'utilitaire . 196
Les commandes de base . 196
Prérequis .. 196
Liste des commandes 196
La gestion de la base de données .. 199
Les commandes d'applications . 203

Lire aussi
Par Maxime Lorant (Ssx`z) et Mathieu Xhonneux (MathX)
Mise à jour : 02/04/2013
Difficulté : Intermédiaire Durée d'étude : 15 jours
Django
« Le framework web pour les perfectionnistes sous pression »
En quelques années, les sites web n'ont cessé d'évoluer. Ils requièrent désormais des développements longs et acharnés, sans oublier le fait que ceux-ci peuvent parfois devenir très complexes et se mesurer en milliers de lignes de code. Aujourd'hui, la simple page web ne suffit plus, et que ce soit dans un cadre professionnel ou personnel, les attentes sont de plus en plus lourdes.
C'est de ce constat qu'est né Django : proposer un développement plus efficace et plus rapide d'une application dynamique web, tout en conservant la qualité ! Ce cours vous apprendra à construire des sites web complexes et élégants, et en un temps record.

Ce tutoriel nécessite des connaissances préalables dans les domaines suivants :
Python : bonne maîtrise des bases, de la programmation orientée objet et des expressions régulières ; HTML/CSS : maîtrise de toute la partie HTML (nous ne parlerons pas de CSS).
Si vous ne connaissez pas ces prérequis, nous ne pouvons que vous conseiller de les étudier avant d'entamer ce tutoriel.
Ce cours porte sur la version 1.5 de Django, et n'assure nullement que toutes les méthodes présentées fonctionneront forcément sur des versions antérieures ou postérieures.
Partie 1 : Présentation de Django
Cette partie est avant tout introductive et théorique. Elle a pour but d'expliquer ce qu'est Django, son fonctionnement, la gestion d'un projet, etc.
Créez vos applications web avec Django
Si vous lisez ceci, c'est que vous avez décidé de vous lancer dans l'apprentissage de Django. Avant de commencer, des présentations s'imposent : Django est un framework web écrit en Python, qui se veut complet tout en facilitant la création d'applications web riches.

Avant de commencer à écrire du code, nous allons tout d'abord voir dans ce chapitre ce qu'est un framework en général, et plus particulièrement ce qu'est Django. Dans un second temps, nous verrons comment l'installer sur votre machine, pour pouvoir commencer à travailler ! Est-il utile de vous rappeler encore ici qu'il est nécessaire d'avoir les bases en Python pour pouvoir commencer ce cours ?
Qu'est-ce qu'un framework ?
Un framework est un ensemble d'outils qui simplifie le travail d'un développeur. Traduit littéralement de l'anglais, un framework est un « cadre de travail ». Il apporte les bases communes à la majorité des programmes ou des sites web. Celles-ci étant souvent identiques (le fonctionnement d'un espace membres est commun à une très grande majorité de sites web de nos jours), un développeur peut les réutiliser simplement et se concentrer sur les particularités de son projet.
Il s'agit donc d'un ensemble de bibliothèques coordonnées, qui permettent à un développeur d'éviter de réécrire plusieurs fois une même fonctionnalité, et donc d'éviter de réinventer constamment la roue. Inutile de dire que le gain en énergie et en temps est considérable !
Quels sont les avantages d'un framework ?
Un framework instaure en quelque sorte sa « ligne de conduite ». Tous les développeurs Django codent de façon assez homogène (leurs codes ont le même fonctionnement, les mêmes principes). De ce fait, lorsqu'un développeur rejoint un projet utilisant un framework qu'il connaît déjà, il comprendra très vite ce projet et pourra se mettre rapidement au travail.
Le fait que chaque framework possède une structure commune pour tous ses projets a une conséquence tout aussi intéressante : en utilisant un framework, votre code sera le plus souvent déjà organisé, propre et facilement réutilisable par autrui.
Voici d'ailleurs un grand défi des frameworks : bien que ceux-ci doivent instaurer une structure commune, ils doivent aussi être souples et modulables, afin de pouvoir être utilisés pour une grande variété de projets, du plus banal au plus exotique. Autrement, leur intérêt serait grandement limité !

Quels sont les désavantages d'un framework ?
Honnêtement, il n'existe pas vraiment de désavantages à utiliser un framework. Il faut bien évidemment prendre du temps à apprendre à en manier un, mais ce temps d'apprentissage est largement récupéré par la suite, vu la vitesse de développement qui peut parfois être décuplée. Nous pourrions éventuellement dire que certains frameworks sont parfois un peu trop lourds, mais il incombe à son utilisateur de choisir le bon framework, adapté à ses besoins.
Qu'est-ce que Django ?
Django est donc un framework Python destiné au web. Ce n'est pas le seul dans sa catégorie, nous pouvons compter d'autres frameworks Python du même genre comme web2py, TurboGears, CherryPy ou Zope. Il a cependant le mérite d'être le plus exhaustif, d'automatiser un bon nombre de choses et de disposer d'une très grande communauté.
Le logo de Django
Django est né en 2003 dans une agence de presse qui devait développer des sites web complets dans des laps de temps très courts (d'où l'idée du framework). En 2005, l'agence de presse Lawrence Journal-World décide de publier Django au grand public, le jugeant assez mature pour être réutilisé n'importe où. Trois ans plus tard, la fondation Django Software est créée par les fondateurs du framework afin de pouvoir maintenir celui-ci et la communauté très active qui l'entoure.
Aujourd'hui, Django est devenu très populaire et est utilisé par des sociétés du monde entier, telles qu', Pinterest, et même la !
Logos d'Instagram, de la NASA et

de Pinterest
Pourquoi ce succès ?
Si Django est devenu très populaire, c'est notamment grâce à sa philosophie, qui a su séduire de nombreux développeurs et chefs de projets. En effet, le framework prône le principe du « Don't repeat yourself », c'est-à-dire en français « Ne vous répétez pas », et permet le développement rapide de meilleures et plus performantes applications web, tout en conservant un code élégant.
Django a pu appliquer sa philosophie de plusieurs manières. Par exemple, l'administration d'un site sera automatiquement générée, et celle-ci est très facilement adaptable. L'interaction avec une base de données se fait via un ensemble d'outils spécialisés et très pratiques. Il est donc inutile de perdre son temps à écrire directement des requêtes destinées à la base de données, car Django le fait automatiquement. De plus, d'autres bibliothèques complètes et bien pensées sont disponibles, comme un espace membres, ou une bibliothèque permettant la traduction de votre application web en plusieurs langues.
Une communauté à votre service
Évidemment, Django dispose des avantages de tous les frameworks en général. Il est soutenu par une communauté active et expérimentée, qui publie régulièrement de nouvelles versions du framework avec de nouvelles fonctionnalités, des corrections de bugs, etc.
Encore un point, et non des moindres, la communauté autour de Django a rédigé au fil des années une documentation très complète sur . Bien que celle-ci soit en anglais, elle reste très accessible pour des francophones. Nous ne pouvons que vous conseiller de la lire en parallèle de ce cours si vous voulez approfondir un certain sujet ou si certaines zones d'ombre persistent.
Enfin, pour gagner encore plus de temps, les utilisateurs de Django ont généralement l'esprit open source et fournissent une liste de snippets, des portions de code réutilisables par n'importe qui. Un site est dédié à ces snippets. Si vous devez vous attaquer à une grosse application ou à une portion de code particulièrement difficile, n'hésitez pas à aller chercher dans les snippets, vous y trouverez souvent votre bonheur !

Téléchargement et installation
Maintenant que nous avons vu les avantages qu'apporte Django, il est temps de passer à son installation. Tout d'abord, assurezvous que vous disposez bien d'une version de Python supérieure ou égale à la 2.6.5 pour la branche 2.6.x ou à la 2.7.3 pour la branche 2.7.x et supérieure. Pour plus d'informations à ce sujet, vous pouvez vous reporter au cours sur le Python du Site du Zéro.
Django 1.5 est également compatible avec Python 3, mais de façon expérimentale : quelques modules, comme la connexion avec MySQL sont indisponibles, faute de bibliothèque compatible Python 3 Nous vous recommandons donc d'attendre Django 1.6 avant de sauter vers Python 3 pour vos applications web.
Par ailleurs, le support de Python 2.5 est abandonné depuis Django 1.5. Nous vous conseillons dès maintenant d'utiliser Python 2.7.3, qui est bien plus stable et à jour.
Il est également plus prudent de supprimer toutes les anciennes installations de Django, si vous en avez déjà. Il peut y avoir des conflits entre les versions, notamment lors de la gestion des projets. Il est essentiel de n'avoir que Django 1.5 sur votre machine, à part si vous avez déjà des applications en production sur des versions antérieures. Dans ce cas, il est conseillé soit de porter toutes vos applications pour Django 1.5, soit d'exécuter vos deux projets avec deux versions de Django bien indépendantes.
Linux et Mac OS
Sous Linux et Mac OS, l'installation de Django peut s'effectuer de deux manières différentes, soit en utilisant le gestionnaire de paquets de votre distribution (ou MacPorts pour Mac OS), soit en installant Django manuellement, via une archive officielle. Nous ne couvrirons pas la première solution, celle-ci dépendant beaucoup trop de votre distribution. Si toutefois vous choisissez cette solution, faites attention à la version de Django disponible dans les dépôts. Il se peut que ce ne soit pas toujours la dernière version qui soit disponible, donc pas à jour et incompatible avec ce cours.
Si vous ne passez pas par les dépôts, le plus simple reste de . Il suffit ensuite de l'extraire et de l'installer, en effectuant les commandes suivantes dans une console :

Code : Console
Windows
Contrairement aux environnements UNIX, l'installation de Django sous Windows requiert quelques manipulations supplémentaires. Téléchargez et extrayez-la. Avant de continuer, nous allons devoir modifier quelques variables d'environnement, afin de permettre l'installation du framework. Pour cela (sous Windows 7) :
- Rendez-vous dans les informations générales du système (via le raccourci Windows + Pause) ;
- Cliquez sur Paramètres système avancés, dans le menu de gauche ;
- Une fois la fenêtre ouverte, cliquez sur Variables d'environnement ;
- Cherchez la variable système (deuxième liste) Path et ajoutez ceci en fin de ligne (faites attention à votre version de
Python) : ;C:\Python27\;C:\Python27\Lib\site-packages\django\bin\. Respectez bien le pointvirgule permettant de séparer le répertoire de ceux déjà présents, comme indiqué à la figure suivante.
Édition du Path sous Windows 7
Validez, puis quittez. Nous pouvons désormais installer Django via la console Windows (Windows + R puis la commande cmd )
:
Code : Console

Les fichiers sont ensuite copiés dans votre dossier d'installation Python (ici C:\Python27).
Vérification de l'installation
Dès que vous avez terminé l'installation de Django, lancez une nouvelle console Windows, puis lancez l'interpréteur Python (via la commande python ) et tapez les deux lignes suivantes :
Code : Python
Si vous obtenez également 1.5 comme réponse, félicitations, vous avez correctement installé Django !
Il se peut que vous obteniez un numéro de version légèrement différent (du type 1.5.1). En réalité, Django est régulièrement mis à jour de façon mineure, afin de résoudre des failles de sécurité ou des bugs. Tenez-vous au courant de ces mises à jour, et appliquez-les dès que possible.
Dans la suite de ce cours, nous utiliserons SQLite, qui est simple et déjà inclus dans les bibliothèques de base de Python. Si vous souhaitez utiliser un autre système de gestion de base de données, n'oubliez pas d'installer les outils nécessaires (dépendances, packages, etc.).
En résumé

Un framework (cadre de travail en français) est un ensemble d'outils qui simplifie le travail d'un développeur.
Un framework est destiné à des développeurs, et non à des novices. Un framework nécessite un temps d'apprentissage avant de pouvoir être pleinement utilisé.
Django est un framework web pour le langage Python très populaire, très utilisé par les entreprises dans le monde :
Mozilla, Instagram ou encore la NASA l'ont adopté !
Ce cours traite de la version 1.5, sortie en février 2013. Nous ne garantissons pas que les exemples donnés soient compatibles avec des versions antérieures et postérieures.
Le fonctionnement de Django
Attaquons-nous au vif du sujet ! Dans ce chapitre, théorique mais fondamental, nous allons voir comment sont construits la plupart des frameworks grâce au modèle MVC, nous aborderons ensuite les spécificités du fonctionnement de Django et comment les éléments d'une application classique Django s'articulent autour du modèle MVT, que nous introduirons également. En dernier lieu, nous expliquerons le système de projets et d'applications, propre à Django, qui permet une séparation nette, propre et précise du code.
Au terme de ce chapitre, vous aurez une vue globale sur le fonctionnement de Django, ce qui vous sera grandement utile lorsque vous commencerez à créer vos premières applications.

Un peu de théorie : l'architecture MVC
Lorsque nous parlons de frameworks qui fournissent une interface graphique à l'utilisateur (soit une page web, comme ici avec Django, soit l'interface d'une application graphique classique, comme celle de votre traitement de texte par exemple), nous parlons souvent de l'architecture MVC. Il s'agit d'un modèle distinguant plusieurs rôles précis d'une application, qui doivent être accomplis. Comme son nom l'indique, l'architecture (ou « patron ») Modèle-Vue-Contrôleur est composé de trois entités distinctes, chacune ayant son propre rôle à remplir.
Tout d'abord, le modèle représente une information enregistrée quelque part, le plus souvent dans une base de données. Il permet d'accéder à l'information, de la modifier, d'en ajouter une nouvelle, de vérifier que celle-ci correspond bien aux critères (on parle d'intégrité de l'information), de la mettre à jour, etc. Il s'agit d'une interface supplémentaire entre votre code et la base de données, mais qui simplifie grandement les choses, comme nous le verrons par la suite.
Ensuite la vue qui est, comme son nom l'indique, la visualisation de l'information. C'est la seule chose que l'utilisateur peut voir. Non seulement elle sert à présenter une donnée, mais elle permet aussi de recueillir une éventuelle action de l'utilisateur (un clic sur un lien, ou la soumission d'un formulaire par exemple). Typiquement, un exemple de vue est une page web, ni plus, ni moins.
Finalement, le contrôleur prend en charge tous les événements de l'utilisateur (accès à une page, soumission d'un formulaire, etc.). Il se charge, en fonction de la requête de l'utilisateur, de récupérer les données voulues dans les modèles. Après un éventuel traitement sur ces données, il transmet ces données à la vue, afin qu'elle s'occupe de les afficher. Lors de l'appel d'une page, c'est le contrôleur qui est chargé en premier, afin de savoir ce qu'il est nécessaire d'afficher.
Schéma de l'architecture MVC
La spécificité de Django : le modèle MVT
L'architecture utilisée par Django diffère légèrement de l'architecture MVC classique. En effet, la « magie » de Django réside dans le fait qu'il gère lui-même la partie contrôleur (gestion des requêtes du client, des droits sur les actions…). Ainsi, nous parlons plutôt de framework utilisant l'architecture MVT : Modèle-Vue-Template.

Cette architecture reprend les définitions de modèle et de vue que nous avons vues, et en introduit une nouvelle : le template (voir figure suivante). Un template est un fichier HTML, aussi appelé en français « gabarit ». Il sera récupéré par la vue et envoyé au visiteur ; cependant, avant d'être envoyé, il sera analysé et exécuté par le framework, comme s'il s'agissait d'un fichier avec du code. Django fournit un moteur de templates très utile qui permet, dans le code HTML, d'afficher des variables, d'utiliser des structures conditionnelles (if/else) ou encore des boucles (for), etc.
Schéma d'exécution d'une requête
Concrètement, lorsque l'internaute appelle une page de votre site réalisé avec Django, le framework se charge, via les règles de routage URL définies, d'exécuter la vue correspondante. Cette dernière récupère les données des modèles et génère un rendu HTML à partir du template et de ces données. Une fois la page générée, l'appel fait chemin arrière, et le serveur renvoie le résultat au navigateur de l'internaute.
On distingue les quatre parties qu'un développeur doit gérer :
Le routage des requêtes, en fonction de l'URL ;
La représentation des données dans l'application, avec leur gestion (ajout, édition, suppression…), c'est-à-dire les modèles ;
L'affichage de ces données et de toute autre information au format HTML, c'est-à-dire les templates ;
Enfin le lien entre les deux derniers points : la vue qui récupère les données et génère le template selon celles-ci.

On en revient donc au modèle MVT. Le développeur se doit de fournir le modèle, la vue et le template. Une fois cela fait, il suffit juste d'assigner la vue à une URL précise, et la page est accessible.
Si le template est un fichier HTML classique, un modèle en revanche sera écrit sous la forme d'une classe où chaque attribut de celle-ci correspondra à un champ dans la base de données. Django se chargera ensuite de créer la table correspondante dans la base de données, et de faire la liaison entre la base de données et les objets de votre classe. Non seulement il n'y a plus besoin d'écrire de requêtes pour interagir avec la base de données, mais en plus le framework propose la représentation de chaque entrée de la table sous forme d'une instance de la classe qui a été écrite. Il suffit donc d'accéder aux attributs de la classe pour accéder aux éléments dans la table et pouvoir les modifier, ce qui est très pratique !
Enfin, une vue est une simple fonction, qui prend comme paramètres des informations sur la requête (s'il s'agit d'une requête GET ou POST par exemple), et les paramètres qui ont été donnés dans l'URL. Par exemple, si l'identifiant ou le nom d'un article du blog a été donné dans l'URL , la vue récupérera faire-debonnes-crepes comme titre et cherchera dans la base de données l'article correspondant à afficher. Suite à quoi la vue générera le template avec le bon article et le renverra à l'utilisateur.
Projets et applications
En plus de l'architecture MVT, Django introduit le développement d'un site sous forme de projet. Chaque site web conçu avec Django est considéré comme un projet, composé de plusieurs applications. Une application consiste en un dossier contenant plusieurs fichiers de code, chacun étant relatif à une tâche du modèle MVT que nous avons vu. En effet, chaque bloc du site web est isolé dans un dossier avec ses vues, ses modèles et ses schémas d'URL.
Lors de la conception de votre site, vous allez devoir penser aux applications que vous souhaitez développer. Voici quelques exemples d'applications :
Un module d'actualités ; Un forum ;
Un système de contact ; Une galerie de photos ; Un système de dons.

Ce principe de séparation du projet en plusieurs applications possède deux avantages principaux :
Le code est beaucoup plus structuré. Les modèles et templates d'une application ne seront que rarement ou jamais utilisés dans une autre, nous gardons donc une séparation nette entre les différentes applications, ce qui évite de s'emmêler les pinceaux !
Une application correctement conçue pourra être réutilisée dans d'autres projets très simplement, par un simple copier/coller, comme le montre la figure suivante.
Organisation
d'un projet Django et réutilisation d'une application
Ici, le développement du système d'articles sera fait une fois uniquement. Pour le second site, une légère retouche des templates suffira. Ce système permet de voir le site web comme des boîtes que nous agençons ensemble, accélérant considérablement le développement pour les projets qui suivent.
En résumé
Django respecte l'architecture MVT, directement inspirée du très populaire modèle MVC ;

Django gère de façon autonome la réception des requêtes et l'envoi des réponses au client (partie contrôleur) ;
Un projet est divisé en plusieurs applications, ayant chacune un ensemble de vues, de modèles et de schémas d'URL ; Si elles sont bien conçues, ces applications sont réutilisables dans d'autres projets, puisque chaque application est indépendante.
Gestion d'un projet
Django propose un outil en ligne de commandes très utile qui permet énormément de choses :
Création de projets et applications ;
Création des tables dans la base de données selon les modèles de l'application ; Lancement du serveur web de développement ; Etc.
Nous verrons dans ce chapitre comment utiliser cet outil, la structure d'un projet Django classique, comment créer ses projets et applications, et leur configuration.
Créons notre premier projet

L'outil de gestion fourni avec Django se nomme et il n'est accessible qu'en ligne de commandes. Pour ce faire, munissez-vous d'une console MS-DOS sous Windows, ou d'un terminal sous Linux et Mac OS X.
Attention ! La console système n'est pas l'interpréteur Python ! Dans la console système, vous pouvez exécuter des commandes système comme l'ajout de dossier, de fichier, tandis que dans l'interpréteur Python vous écrivez du code Python.