Django - static.fnac-static.com€¦ · Django Patrick SAMSON Django Développez vos applications...

13
Django Patrick SAMSON Développez vos applications web en Python (fonctionnalités essentielles et bonnes pratiques) En téléchargement le code source + QUIZ Version en ligne OFFERTE ! pendant 1 an

Transcript of Django - static.fnac-static.com€¦ · Django Patrick SAMSON Django Développez vos applications...

  • Django

    Patrick SAMSON

    Django Développez vos applications web en Python (fonctionnalités essentielles et bonnes pratiques)Ce livre sur Django s’adresse aux développeurs qui souhaitent découvrir ce framework Python sous un angle résolument pratique avec la mise en place complète et effective d’un envi-ronnement de développement et la conception d’une applica-tion web. Tout au long du livre, l’auteur utilise comme fil rouge l’exemple du développement d’une application de messagerie interne pour les utilisateurs d’un site, suffisamment représentatif pour que le lecteur étudie les fonctionnalités incontournables de Django et les bonnes pratiques à mettre en œuvre.Le lecteur est d’abord accompagné pour l’installation et la configuration des outils nécessaires permettant de disposer d’un environnement de développement sur son poste avant de découvrir la structure attendue de l’application. Il explore en-suite en détail les notions de routage et de modèles d’objets. Des chapitres relatifs à la pose de traces ou aux intergiciels donnent la possibilité de diagnostiquer et de comprendre des traitements internes, en particulier les échanges avec la base de données. Le vaste sujet des vues, pages et gabarits permet-tant de rendre l’application dynamique est également détaillé dans des chapitres dédiés.

    Pour finir, l’auteur présente des alternatives à certaines tech-niques présentées ainsi que la mise en œuvre de l’internatio-nalisation d’une application.Bien qu’invité à écrire progressivement les contenus successifs des fichiers du projet développé en exemple, le lecteur pourra en télécharger une copie finale sur le site www.editions-eni.fr.

    Patrick SAMSON

    Enthousiasmé depuis toujours par l’informatique et la puis-sance du numérique, Patrick SAMSON mène une carrière de développeur indépendant depuis plus de 25 ans. Tout au long de son parcours, il a eu l’occasion de pratiquer plusieurs dizaines de langages de programmation et d’outils. La découverte des qualités du langage Python et du framework Django a été une telle révélation dans son métier qu’il a souhaité partager à travers cet ouvrage son plaisir de concilier les capacités d’un framework et la créativité du développeur.

    Téléchargementwww.editions-eni.fr.fr

    Sur www.editions-eni.fr :b Le code source de l’application

    développée en exemple.

    Développez vos applications

    web en Python (fonctionnalités essentielles et bonnes pratiques)

    Dja

    ngo

    - Dév

    elop

    pez

    vos

    appl

    icat

    ions

    web

    en

    Pyth

    on

    En téléchargement

    le code source

    ISBN

    : 978

    -2-40

    9-024

    17-7

    39 €

    Pour plus d’informations :

    + QUIZ

    Version en ligne

    OFFERTE !pendant 1 an

  • 1Table des matières

    Avant-propos1. Public concerné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2. Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    3. Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    4. Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    Chapitre 1Installation

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    2. Installation de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1 Python 2 ou 3 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 32 ou 64 bits ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 Déroulé de l'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4 Après l'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    3. Installation d'un moteur de base de données . . . . . . . . . . . . . . . . . . . 233.1 Installation de PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2 Installation du pilote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    4. Installation d'un outillage pour traduction. . . . . . . . . . . . . . . . . . . . . 31

    5. Installation d'un gestionnaire de fuseaux horaires . . . . . . . . . . . . . . . 33

    6. Installation de Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    Les éléments à télécharger sont disponibles à l'adresse suivante : http://www.editions-eni.fr 

    Saisissez la référence ENI de l'ouvrage EIDJAN dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

    lcroiseTampon

  • 2Développez vos applications web en Python

    Django

    Chapitre 2Création de site

    1. Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    2. Création d'un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    3. Premier lancement du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    4. Création d'une première application . . . . . . . . . . . . . . . . . . . . . . . . . . 454.1 Emplacement d'une application . . . . . . . . . . . . . . . . . . . . . . . . . 464.2 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

    5. Paramètres de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.1 Configuration minimale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.2 Configuration par défaut affinée. . . . . . . . . . . . . . . . . . . . . . . . . 55

    6. Variations de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    7. Création de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    8. Outillage de mise au point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    Chapitre 3Routage

    1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    2. Configuration des adresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    3. Espace de noms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    4. Instances multiples d'une même application . . . . . . . . . . . . . . . . . . . 81

    Chapitre 4Modèles

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    2. Instanciation de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . 862.1 Création de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . 862.2 Référencement de la base de données . . . . . . . . . . . . . . . . . . . . . 88

  • 3Table des matières

    2.3 Première alimentation de la base de données . . . . . . . . . . . . . . . 902.4 Création d'un super-utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    3. Champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    4. Métadonnées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    5. ORM (Object Relation Mapping) et migrations . . . . . . . . . . . . . . . 1055.1 Création d'une migration initiale . . . . . . . . . . . . . . . . . . . . . . . 1065.2 Exécution d'une migration initiale . . . . . . . . . . . . . . . . . . . . . . 108

    6. Exploration des métadonnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

    7. Gestionnaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    8. Opérations sur objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188.2 Mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238.3 Lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268.4 Suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288.5 Optimisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308.6 Opérations de masse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    8.6.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338.6.2 Lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348.6.3 Chargement d'instantané. . . . . . . . . . . . . . . . . . . . . . . . . 1348.6.4 Quelques usages des instantanés. . . . . . . . . . . . . . . . . . . 139

    9. Migration de structures et données. . . . . . . . . . . . . . . . . . . . . . . . . . 150

    Chapitre 5Traces et journalisation

    1. Requêtes à la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531.1 Plan d'exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531.2 Constitution du code SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601.3 Journalisation des requêtes SQL . . . . . . . . . . . . . . . . . . . . . . . . 163

    1.3.1 Observations manuelles . . . . . . . . . . . . . . . . . . . . . . . . . . 1631.3.2 Observations automatiques. . . . . . . . . . . . . . . . . . . . . . . 166

  • 4Développez vos applications web en Python

    Django

    2. Pose de traces personnalisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712.1 Noms des enregistreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.2 Exemple d'enregistreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.3 Autres exemples de gestionnaires . . . . . . . . . . . . . . . . . . . . . . . 177

    2.3.1 Rotation de journaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772.3.2 Transmission vers une machine distante . . . . . . . . . . . . 179

    Chapitre 6Intergiciels

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

    2. Création d’une application dédiée à l’outillage. . . . . . . . . . . . . . . . . 184

    3. Implémentation d’un intergiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1853.1 Mise en place du cadre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1853.2 Écriture d’un traitement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1863.3 Alternance de mise en/hors service . . . . . . . . . . . . . . . . . . . . . . 189

    Chapitre 7Vues

    1. Fonctions ou classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    2. Vues intégrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1932.1 Vues de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1932.2 Vues génériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

    3. Greffons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

    4. Données de contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

    5. Processeurs de contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    6. Requêtes AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2126.1 Restriction stricte au mode AJAX . . . . . . . . . . . . . . . . . . . . . . . 215

    6.1.1 Par greffon seul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2176.1.2 Par greffon et décorateur . . . . . . . . . . . . . . . . . . . . . . . . . 217

    7. Intégrations en modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

  • 5Table des matières

    8. Simulation d'authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

    9. Écritures des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2249.1 Dossier d'arrivée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2249.2 Dossier d'envoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2269.3 Factorisation des vues de dossier . . . . . . . . . . . . . . . . . . . . . . . . 2279.4 Encore plus d'optimisation et d'intégration . . . . . . . . . . . . . . . 2329.5 Contrôle du cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2409.6 Lecture de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2429.7 Composition de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2519.8 Effacement de message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

    Chapitre 8Pages et gabarits

    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

    2. Moteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.1 Moteurs intégrés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.2 Moteurs personnalisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2782.3 Sélection du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

    3. Principes de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

    4. Pages non dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2824.1 Application flatpages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

    4.1.1 Exemple d'usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2844.2 Fichiers statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

    4.2.1 Déploiement en production. . . . . . . . . . . . . . . . . . . . . . . 2974.2.2 Simulations en développement . . . . . . . . . . . . . . . . . . . . 302

    5. Structuration des pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

    6. Expérimentation rapide et manuelle . . . . . . . . . . . . . . . . . . . . . . . . . 304

    7. Écritures des gabarits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3057.1 Base du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3057.2 Bases de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3107.3 Dossier d'arrivée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

  • 6Développez vos applications web en Python

    Django

    7.4 Dossier d'envoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3177.5 Lecture de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3177.6 Composition de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3187.7 Effacement de message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

    8. Composants de gabarit personnalisés . . . . . . . . . . . . . . . . . . . . . . . . 3278.1 Balise de gabarit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3278.2 Filtre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

    Chapitre 9Alternatives

    1. Propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

    2. Alternance entre plusieurs versions de Django. . . . . . . . . . . . . . . . . 3352.1 Par configuration propre au site . . . . . . . . . . . . . . . . . . . . . . . . 336

    2.1.1 Apport d'une ancienne version . . . . . . . . . . . . . . . . . . . . 3382.1.2 Apport d'une nouvelle version . . . . . . . . . . . . . . . . . . . . . 3392.1.3 Emploi d'une instance déjà présente . . . . . . . . . . . . . . . . 341

    2.2 Par environnement virtuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

    3. Variations de configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3483.1 Superposition en profondeur . . . . . . . . . . . . . . . . . . . . . . . . . . . 3483.2 Exécution de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

    Chapitre 10Internationalisation

    1. Propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

    2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

    3. Détermination de la langue de l'utilisateur. . . . . . . . . . . . . . . . . . . . 361

    4. Limitation de la quantité de langues supportées . . . . . . . . . . . . . . . 363

    Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

  • 37

    Chapitre 2Création de site

    Création de site1. ObjectifsDans le chapitre précédent, les outils et l'infrastructure logicielle nécessaires àla création de site ont été mis en place. Ceci va permettre de poser les bases duprojet.

    Le choix du répertoire racine d'un site est libre, il n'y a aucune obligation enrapport avec Python ou Django. De même il n'y a pas à se placer sous la racined'un serveur frontal (Apache, Nginx, etc.) et il vaut d'ailleurs mieux l'éviterpour ne pas s'exposer à un éventuel risque de visibilité du code à cause d'unefaille de sécurité. Le présent exposé va être poursuivi avec une destinationcourte et expressive, choisie arbitrairement à D:\dj.

    2. Création d'un projetLa mise en œuvre d'une infrastructure logicielle suppose le respect d'un cadreconventionnel de disposition des éléments, ou, dit en d'autres termes, mettreles choses là où l'infrastructure a prévu de les trouver. Plutôt que de toutdevoir écrire soi-même, des assistants sont mis à disposition pour poser cecadre initial, sur la base d'un gabarit, avec des valeurs par défaut supposéesconvenir dans la majorité des cas.

    lcroiseTampon

  • © E

    diti

    ons

    ENI -

    All

    righ

    ts r

    eser

    ved

    38Développez vos applications web en Python

    Django

    dCréez un nouveau répertoire pour héberger le projet :D:\>md dj

    dCréez un nouveau projet, selon l'une ou l'autre façon :D:\>\Python37\Scripts\django-admin startproject mysite dj

    Ou :

    D:\>cd djD:\dj>\Python37\Scripts\django-admin startproject mysite .

    Dans ce cas, notez bien la présence d'un caractère point isolé final.

    Cette structure va être créée :

    dj\├─ manage.py└─ mysite\├─ __init__.py├─ settings.py├─ urls.py└─ wsgi.py

    La commande startproject a, d'une part, un paramètre obligatoire pournommer le projet et, d'autre part, un paramètre optionnel pour citer unchemin de répertoire, devant exister préalablement, pour accueillir le projet.

    Le nom du projet est un choix libre, employer le mot mysite est juste uneconvention usuelle. En effet, il n'est pas nécessaire d'utiliser le nom du projetpuisque le répertoire racine donne déjà son nom (dj dans le cas présent). Deplus, lorsqu'on passe d'un site à un autre, il est plus facile de comprendre queles paquets désignés sous le préfixe mysite concernent spécifiquement le sitecourant, en contraste évident avec des paquets de provenance externe. L'éven-tuelle recopie de paquets d'un projet vers un autre est aussi facilitée puisqu'onévite ainsi l'effort fastidieux des mises en accord du nom.

    Le choix est fait de citer explicitement le paramètre optionnel, car en sonabsence un premier répertoire sera créé en reprenant le nom du projet (s'ilexiste déjà, la commande échouera).

  • 39Création de siteChapitre 2

    La commande minimale, que l'on voit habituellement dans les documenta-tions et tutoriels, de la forme :

    django-admin startproject mysite

    aurait produit une structure telle que :

    dj\└─ mysite\

    ─ manage.py└─ mysite\

    └─ ...

    Comme on a naturellement tendance à s'être déjà placé dans un répertoirevierge, nouvellement créé pour être dédié au projet, la présence d'un premierrépertoire mysite paraît superflue et on se demande quel peut être son rôleet si son nom doit être préservé. En réalité il ne s'agit que d'un conteneur, dontle nom et la présence n'ont pas d'importance pour Django. Il est donc permisde supprimer cet étage ou de le renommer.

    Les fichiers arrivés sont :

    – manage.py : le point d'entrée pour les commandes en mode ligne destinéesà ce projet. Les commandes documentées pour django-admins'appliquent à cet utilitaire puisqu'il joue le même rôle, mais du fait qu'ilaménage son environnement, il a l'avantage de cibler ce projetimplicitement, sans qu'il soit nécessaire de le préciser.

    – __init__.py : le traditionnel fichier pour qualifier ce répertoire au rangd'un paquet Python. Ce fichier est ici vide.

    – settings.py : les paramètres de configuration du projet pour dirigerl'infrastructure logicielle.

    – urls.py : les déclarations de routes du projet.– wsgi.py : le point d'entrée à l'usage des serveurs web frontaux qui implé-

    mentent l'interface WSGI, permettant ainsi un déploiement aisé du projet.

  • © E

    diti

    ons

    ENI -

    All

    righ

    ts r

    eser

    ved

    40Développez vos applications web en Python

    Django

    3. Premier lancement du siteAfin de se rassurer sur la bonne situation des actions menées jusqu'à présent,il est permis à ce stade de tenter un lancement du serveur de développementde Django.

    dPassez la commande de lancement du serveur intégré :D:\dj>py manage.py runserverPerforming system checks...

    System check identified no issues (0 silenced).

    You have 15 unapplied migration(s). Your project may not workproperly until you apply the migrations for app(s): admin, auth,contenttypes, sessions.Run 'python manage.py migrate' to apply them.

    Django version 2.1.5, using settings 'mysite.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.

    On constate qu'à l'occasion de ce lancement, il est préalablement procédé à unbalayage du projet, à la recherche d'erreurs usuelles. Il s'agit des mêmescontrôles que ceux de la commande check.Le message d'avertissement à propos de migrations en attente d'applicationest attendu dans le contexte actuel. Il suffit de l'ignorer et il n'est pas néces-saire de passer la commande mentionnée.

    Comme il est dit dans la sortie de la console et dans la documentation de lacommande runserver, il ne s'agit aucunement d'un serveur utilisable pourun environnement de production.

  • 41Création de siteChapitre 2

    C'est un outil dédié aux développeurs pour faciliter leur travail de conception,car il présente les avantages suivants :

    – Il est disponible sur la machine locale, immédiatement et sans effort.L'interface réseau et le port sont par défaut à 127.0.0.1 et 8000, mais il estpossible de spécifier d'autres valeurs en arguments. Par exemple :manage.py runserver 192.168.0.10:8899 permet de servir aussides requêtes provenant d'autres postes de travail que sa propre machine(192.168.0.10 étant dans cet exemple une adresse IP privée sur un segmentde réseau local). On peut aussi employer l'adresse 0.0.0.0 pour écoutertoutes les interfaces réseau de la machine. Son raccourci 0 mentionné par ladocumentation Django ne semble pas être supporté sur la plateformeWindows et le lancement échoue avec l'erreur « Error: [Errno 11001]getaddrinfo failed ». Une autre variante est d'employer le nom de lamachine, par exemple PC-Patrick:8001, mais cela suppose uncomplément de configuration concernant ALLOWED_HOSTS, en rapportavec des protections de sécurité.

    – Un changement dans les fichiers de code amorce automatiquement unrechargement du serveur, sans qu'il soit nécessaire de penser à l'arrêter et lerelancer. Cette manipulation d'arrêt-relance reste quand même un passageobligé dans les cas d'ajouts de fichier. Il est aussi à noter que la surveillancea un coût en ressources système, car elle se réalise par la lecture toutes lessecondes de la date de modification des fichiers. On peut ainsi constater àl'état de repos du serveur une consommation continuelle de CPU (proces-seur) de l'ordre de 4 à 7 %. L'argument optionnel --noreload permet dedésactiver ce comportement et ainsi laisse l'occupation CPU à 0 % au repos,ce qui peut avoir un intérêt, par exemple pour un simple usage de démons-tration ou pour épargner la consommation énergétique sur un portable.

    Si nécessaire, il est possible d'avoir plusieurs serveurs actifs en même temps, apriori sur des projets séparés, à la seule condition de leur affecter des numérosde port différents.

  • © E

    diti

    ons

    ENI -

    All

    righ

    ts r

    eser

    ved

    42Développez vos applications web en Python

    Django

    Si on observe les répertoires du projet, on constate la présence d'un fichiersupplémentaire à la suite du lancement :

    dj\├─ db.sqlite3└─ ...

    Rien n'a encore été établi relativement à la base de données, mais puisque l'in-frastructure logicielle a la nécessité d'avoir une liaison avec une base, la confi-guration fournie par le gabarit prévoit le plus simple, c'est-à-dire une basesqlite3 puisque sa forme se réduit à un simple fichier. La configuration aétabli que le fichier porte ce nom et soit localisé à cet emplacement. Il est nor-mal que le fichier soit encore totalement vide, aucune action de création detables n'a eu lieu jusqu'à présent.

    dAllez sur le site http://localhost:8000 pour y constater la page servie :