• 40 hours
  • Medium

Free online content available in this course.

Paperback available in this course

course.header.alt.is_certifying

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 10/11/19

Gestion d'un projet

Log in or subscribe for free to enjoy all this course has to offer!

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 nommedjango-adminet 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.

Sous Windows, allez dans le menuDémarrer > Exécuter  et tapez dans l'invite de commandecmd . Une console s'ouvre, déplacez-vous dans le dossier dans lequel vous souhaitez créer votre projet grâce à la commandecd , suivie d'un chemin. Exemple :

cd C:\Mes Documents\Utilisateur\

Si vous avez un doute concernant votre nom d'utilisateur, vous pouvez utiliser la touche "Tab" plusieurs fois pour faire défiler les différents dossiers disponibles quand vous avez déjà écritcd C:\Mes documents\.

Sous Mac OS X et Linux, lancez l'application Terminal (elle peut parfois également être nommée Console sous Linux), et déplacez-vous dans le dossier dans lequel vous souhaitez créer votre projet, également à l'aide de la commande cd  :

cd /home/user/Projets/

Tout au long du tutoriel, nous utiliserons un blog sur les bonnes crêpes bretonnes comme exemple. Ainsi, appelons notre projetcrepes_bretonnes(seuls les caractères alphanumériques et underscores sont autorisés pour le nom du projet) et créons-le grâce à la commande suivante :

django-admin startproject crepes_bretonnes

Un nouveau dossier nommécrepes_bretonnesest apparu et possède la structure suivante :

crepes_bretonnes/
├── crepes_bretonnes
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Il s'agit de votre projet. Dans le dossier principalcrepes_bretonnes, nous retrouvons deux éléments : un fichiermanage.pyet un autre sous-dossier nommé égalementcrepes_bretonnes

Le sous-dossier contient quatre fichiers Python, à savoirsettings.py,urls.py,wsgi.pyet__init__.py. Ne touchez surtout pas à ces deux derniers fichiers, ils n'ont pas pour but d'être modifiés ! Les deux autres fichiers ont des noms plutôt éloquents :settings.pycontiendra la configuration de votre projet, tandis queurls.pyrassemblera toutes les URL de votre site web et la liste des fonctions à appeler pour chaque URL. Nous reviendrons sur ces deux fichiers plus tard.

Ensuite, à la racine du projet, le fichiermanage.pyest en quelque sorte un raccourci local de la commandedjango-adminqui prend en charge la configuration de votre projet. Vous pouvez désormais oublier la commandedjango-admin, elle ne sert en réalité qu'à créer des projets, tout le reste se fait viamanage.py. Bien évidemment, n'éditez pas ce fichier non plus.

Votre projet étant créé, pour vous assurer que tout a été correctement effectué jusqu'à maintenant, vous pouvez lancer le serveur de développement via la commande python manage.py runserver:

$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

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

November 01, 2042 - 13:37:00
Django version 2.0b1, using settings 'crepes_bretonnes.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Ne vous attardez pas sur sur l'avertissement décrit en rouge, nous y viendrons plus tard. Cette console vous donnera des informations, des logs (une historique indiquant quelle page a été accédée, quand et par qui) et les exceptions de Python lancées en cas d'erreur lors du développement. Par défaut, l'accès au site de développement se fait via l'adressehttp://localhost:8000. Vous devriez obtenir quelque chose comme la figure suivante dans votre navigateur :

Votre première page Django
Votre première page Django

Si ce n'est pas le cas, assurez-vous d'avoir bien respecté toutes les étapes précédentes !

Au passage, manage.py  propose bien d'autres sous-commandes, autres querunserver . Une petite liste est fournie avec la sous-commandehelp:

python manage.py help

Toutes ces commandes sont expliquées dans une annexe, donc nous vous invitons à la survoler de temps en temps, au fur et à mesure que vous avancez dans ce cours, et nous reviendrons sur certaines d'entre elles dans certains chapitres. Il s'agit là d'un outil très puissant qu'il ne faut surtout pas sous-estimer. Le développeur Django y a recours quasiment en permanence, d'où l'intérêt de savoir le manier correctement.

Configurez votre projet

Avant de commencer à écrire des applications Django, configurons le projet que nous venons de créer. Ouvrez le fichiersettings.pydont nous avons parlé tout à l'heure. Il s'agit d'un simple fichier Python avec une liste de variables que vous pouvez modifier à votre guise.

Pour commencer, nous avons tout en haut la variableBASE_DIR, définie automatiquement selon le chemin du fichier courant (qui est settings.py  pour rappel) :

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

La fonctiondirnameest appelée deux fois, afin de remonter d'un dossier et ainsi avoir le chemin vers la racine du projet. La variable BASE_DIR  peut être ainsi utilisée pour référencer des chemins vers des fichiers au sein du projet (ressources CSS, Javascript, fichiers de test, base de données SQLite...)

Ensuite, nous allons expliquer les variables les plus importantes. Tout d'abord nous avons la variable de debug (débogage) :

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

Cette variable permet d'indiquer si votre site web est en mode « debug » ou pas. Le mode de débogage affiche des informations pour déboguer vos applications en cas d'erreur. Ces informations affichées peuvent contenir des données sensibles de votre fichier de configuration. Ne mettez donc jamaisDEBUG = Trueen production, comme le commentaire le précise !

Nous avons ensuite la variable ALLOWED_HOSTS  que nous allons laisser de côté pour le moment. Elle permet de renseigner les noms de domaine et adresses IP par lesquels le projet est accessible lorsque le modeDEBUG est désactivé. Nous allons également laisser de côté plusieurs variables, que l'on aura l'occasion de recroiser et approfondir dans la suite de ce cours.

La configuration de la base de données se fait dans le dictionnaireDATABASES, déjà rempli pour gérer une base de données SQLite (notez l'utilisation de BASE_DIRpar ailleurs)
Nous conseillons pour le développement local de garder cette configuration. L'avantage de SQLite comme gestionnaire de base de données pour le développement est simple : il ne s'agit que d'un simple fichier. Il n'y a donc pas besoin d'installer un service à part ; Python et Django se chargent de tout. Si vous n'avez aucune idée de ce qu'est réellement une base de données SQL, n'ayez aucune crainte, le prochain chapitre vous expliquera en détail en quoi elles consistent et comment elles fonctionnent.

Si vous souhaitez utilisez une base de données MySQL par exemple, plus de champs sont nécessaires, voici une configuration d'exemple :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # Backends disponibles : 'postgresql', 'mysql', 'sqlite3' et 'oracle'.
        'NAME': 'crepes_bretonnes',             # Nom de la base de données
        'USER': '<nom d\'utilisateur>',
        'PASSWORD': '<mot de passe MySQL>',        
        'HOST': '127.0.0.1',                    # Utile si votre base de données est sur une autre machine
        'PORT': '3306',                         # ... et si elle utilise un autre port que celui par défaut
    }
}

Plus bas dans le fichier, nous avons quelques variables pour définir la langue et le fuseau horaire de votre projet. N'oubliez pas de changer  LANGUAGE_CODE comme indiqué ci-dessous :

# Langage utilisé au sein de Django, pour afficher les messages 
# d'information et d'erreurs notamment
LANGUAGE_CODE = 'fr-FR'
# Fuseau horaire, pour l'enregistrement et l'affichage des dates
# Laissez UTC dans le cas de l'Europe de l'Ouest, c'est notre fuseau ;)
TIME_ZONE = 'UTC'

Il y a ensuite les variablesUSE_I18NUSE_L10N  et USE_TZ  qui sont toutes mises à True. Elles permettent entre autres d'activer l'internationalisation et ainsi avoir l'interface en français, la représentation des jours au formatjj/mm/aaaa  et d'autres détails.

Voilà ! Les variables les plus importantes ont été expliquées. Pour que ce ne soit pas indigeste, nous n'avons pas tout traité, il en reste en effet beaucoup d'autres. Nous reviendrons sur certains paramètres plus tard. En attendant, si une variable vous intrigue, n'hésitez pas à lire le commentaire (bien qu'en anglais) à côté de la déclaration et à vous référer à la documentation en ligne.

Créons notre première application

Comme nous l'avons expliqué précédemment, un projet se compose de plusieurs applications, chacune ayant un but bien précis (système d'actualités, galerie photos…). Pour créer une application dans un projet, le fonctionnement est similaire à la création d'un projet : il suffit d'utiliser la commandemanage.py startapp , à l'intérieur de votre projet. Pour notre site sur les crêpes bretonnes, créons un blog pour publier nos nouvelles recettes :

python manage.py startapp blog

Comme avecstartproject , startapp  crée un dossier avec plusieurs fichiers à l'intérieur. La structure de notre projet ressemble à ceci :

crepes_bretonnes/
├── blog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── crepes_bretonnes
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Si vous avez suivi, certains noms de fichiers sont relativement évidents. Nous allons les voir un à un dans les prochains chapitres :

  • admin.py  va permettre de définir ce que souhaitez afficher et modifier comme modèles depuis l'administration de l'application générée automatiquement ;

  • apps.py  permet de configurer certaines propriétés de l'application, notamment son nom ;

  • models.py contiendra vos modèles ;

  • tests.py  permet la création de tests unitaires (un chapitre y est consacré dans la quatrième partie de ce cours) ;

  • views.py  contiendra toutes les vues de votre application.

Le dossier migrations nous servira plus tard, quand nous parlerons des modèles. Il permet de retracer l'évolution de vos modèles dans le temps et d'appliquer les modifications à votre base de données. Nous verrons ça plus en détails également, laissons-le de côté pour le moment.

Dernière petite chose, il faut ajouter cette application au projet. Pour que Django considère le sous-dossierblog  comme une application, il faut donc l'ajouter dans la configuration.

Retournez dans settings.py, et cherchez la variable INSTALLED_APPS, que l'on a ignorée plus tôt. Tout en conservant les autres applications installées par défaut, ajoutez une chaîne de caractères avec le nom de votre application. Votre variable devrait ressembler à quelque chose comme ceci :

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

Nous sommes désormais prêts pour attaquer le développement de notre application de blog !

En résumé

  • L'administration de projet s'effectue via le script manage.py. Tout particulièrement, la création d'un projet se fait via la commande django-admin startproject mon_projet  ;

  • À la création du projet, Django déploie un ensemble de fichiers, facilitant à la fois la structuration du projet et sa configuration ;

  • Pour tester notre projet, il est possible de lancer un serveur de test, via la commande python manage.py runserver, dans le dossier de notre projet. Ce serveur de test ne doit pas être utilisé en production ;

  • Il est nécessaire de modifier le fichier settings.py, afin de configurer le projet selon nos besoins. Ce fichier ne doit pas être partagé avec les autres membres ou la production, puisqu'il contient des données dépendant de votre installation, comme la connexion à la base de données.

Example of certificate of achievement
Example of certificate of achievement