Files
training.django/documentation/02-structure.md
Steve Kossouho e3ebf6bf4f Add documentation and source
Added documentation, source and extra files.
2025-07-02 20:26:50 +02:00

12 KiB
Raw Blame History

title, author
title author
Projets et applications Steve Kossouho

Structure d'un site web avec Django


Notion de projet dans Django

Dans le jargon de [Django]{.naming}, un projet équivaut à un site complet que vous souhaitez créer. Par exemple, si vous souhaitez créer un nouveau site web à déployer en production sur un serveur, vous devez créer un [projet]{.naming} associé à celui-ci.


Créer un nouveau projet

Puisqu'il vous faut un projet pour votre prochain site web, vous devez le créer. Le framework Django vous impose une structure générale, qui peut être créée en ligne de commande. (les frameworks front-end tels que [vue.js]{.naming} par exemple, utilisent le même système de [bootstrapping]{.naming}).

Lorsque vous installez Django, le framework vous permet d'utiliser certains commandes dans un terminal. Lesdites commandes vont vous permettre d'exécuter plusieurs tâches d'administration, dont la création de la structure minimale d'un nouveau projet.


L'outil principal de gestion de projets Django est disponible sous le nom django-admin{.bash}. Sa documentation indique qu'on peut l'utiliser pour réaliser diverses tâches de base, dont la création d'un nouveau répertoire de projet :

django-admin startproject <name> [répertoire de création, ou name par défaut]

Cette commande est nécessaire et fait partie du processus normal de création de site. En général, si le répertoire contenant le projet à réaliser existe déjà (par exemple lorsqu'on travaille avec PyCharm), il faut porter une attention à ne pas créer une arborescence inutile; il faudra créer le projet Django directement à la racine du répertoire de projet PyCharm :

django-admin startproject <name> .

Notez le . afin d'indiquer à la commande startproject de ne pas créer un sous-répertoire inutile


Fichiers du package de projet

La commande startproject de l'outil django-admin vous crée un répertoire avec le minimum syndical pour démarrer un projet avec des bases fiables (sécurité, fonctionnalités). Les fichiers créés par cette commande sont presque tous nécessaires au bon fonctionnement d'un site web écrit avec Django.


Description
myproject/ Répertoire racine du projet contenant les fichiers de configuration.
├── manage.py Script de gestion du projet Django (lancer le serveur, migrations).
└── myproject/ Répertoire contenant les paramètres et configurations du projet.
├── __init__.py Fichier vide marquant ce répertoire comme un package Python.
├── settings.py Fichier de configuration du projet Django (bases de données, etc.).
├── urls.py Fichier de routage des URLs pour les vues du projet.
├── asgi.py Point dentrée pour le serveur ASGI (pour les applications asynchrones).
└── wsgi.py Point dentrée pour le serveur WSGI (pour les applications synchrones).

Le fichier manage.py

Ce fichier est un script proposant exactement la même chose que l'outil en ligne de commande django-admin, mais en prenant en compte les paramètres spécifiques au projet, tels qu'indiqués dans le fichier settings.py.

Par exemple, il peut être utilisé pour mettre à jour le schéma de la base de données d'un projet Django. Lorsqu'un [projet]{.naming} est configuré pour utiliser des "plugins", ces derniers peuvent proposer de nouvelles commandes utilisables avec l'outil.

# Lancer le serveur web de développement pour tester son projet
python manage.py runserver

Le fichier settings.py

Ce fichier contient, sous la forme de simples constantes (ex. CONSTANTE = valeur{.python}), la configuration actuelle de votre projet. Le nom des constantes à définir est documenté dans le détail dans la documentation officielle, mais la liste des paramètres disponibles est si longue qu'il faut la consulter uniquement au besoin.

Parmi les paramètres intéressants, vous pouvez configurer votre accès aux bases de données, choisir les répertoires par défaut pour stocker des fichiers, les "plugins" utilisés par votre projet, et globalement tous les éléments de votre site.


Autres fichiers importants

  • urls.py : fichiers définissant les URL principales de votre site
  • asgi.py : fichier de serveur asynchrone pour la mise en production
  • wsgi.py : fichier de serveur synchrone pour la mise en production

Notion d'application dans Django

Un concept intéressant de Django est que si vous avez un projet, vous avez la possibilité d'y brancher, à l'instar d'un système de plugins, des packages Python réutilisables que l'on appelle [applications]{.naming}.

Une application Django est un package Python possédant une certaine structure (certains modules sont détectés automatiquement par le framework Django). Une application est normalement écrite pour définir un périmètre de fonctionnalités réutilisable entre plusieurs projets. Par exemple, une application de gestion de blog, de gestion d'images, etc.


Applications fournies par Django

Parmi les nombreuses applications fournies avec le framework Django, vous trouverez par exemple des applications dédiées à plusieurs sujets :

Module Description
django.contrib.auth Gestion des utilisateurs, groupes et permissions (à venir)
django.contrib.admin Une interface d'administration avancée (à venir)
django.contrib.messages Système de messages génériques pour les utilisateurs.
django.contrib.staticfiles Gestion des fichiers statiques tels que les fichiers CSS et JS.
django.contrib.sites Gestion des sites multiples dans une seule application Django.

N'oubliez pas que Django est extensible et que de nombreuses autres applications tierces sont disponibles via le Python Package Index (PyPI) pour répondre à des besoins plus spécifiques.


Créer une nouvelle application

Pour créer une application, vous pouvez utiliser la commande suivante dans un terminal :

django-admin startapp <package>

Un package Python avec certains fichiers par défaut sera créé. Si cette application est spécifique à votre projet de site plutôt qu'à une fonctionnalité réutilisable, vous pouvez la créer dans votre répertoire de projet, mais si vous souhaitez travailler sur votre application pour la réutiliser dans plusieurs projets, vous pourriez la créer sans même avoir un projet Django pour la tester.

Une application générale pour un projet est souvent nommée core, main ou project (si cela n'est pas déjà pris).

Une application développée pour être réutilisable sera de préférence développée de façon à être installable avec l'outil pip, mais ceci est un sujet avancé.


Fichiers créés dans le package d'application

Lorsque vous créez une application Django pour l'utiliser dans un projet, un package est généré contenant des fichiers de base, mais pas tous fondamentaux.

Fichier/Répertoire Description
admin.py Module de configuration de l'administration.
apps.py Module déclarant les informations de l'application.
migrations/ Package contenant les évolutions de la couche Modèle.
models.py Module pour déclarer la couche Modèle.
tests.py Module de tests automatisés (unittest par défaut).
views.py Module pour déclarer la couche Vue et Contrôleur.

Fichiers non créés avec l'application

Certains modules ou répertoires sont souvent présents dans des applications Django, et doivent être créés au besoin, manuellement :

Fichier/Répertoire Description
fixtures/ Répertoire contenant des dumps de données réutilisables.
forms.py Module pour déclarer des formulaires.
urls.py Module pour déclarer des routes locales à l'application.
locale/ Répertoire de gestion des catalogues de traduction.
static/ Répertoire contenant les fichiers statiques de l'application.
templates/ Répertoire contenant les templates de l'application.

Associer une application à un projet

Pour que Django reconnaisse que votre application est activée dans votre projet, ce qui permettra à Django d'y détecter automatiquement certains fichiers (certains modules y seront détectés automatiquement), vous devez préciser dans les paramètres de votre projet quelles applications vous souhaitez y inclure.

Pour cela, vous devez ajouter le nom qualifié de package de votre application dans le paramètre INSTALLED_APPS du module settings.py du projet :

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "app_package_name",  # le nom d'import de votre package
]

Ce paramètre est une liste contenant les applications activées pour votre site. La configuration par défaut est généralement saine et il est désirable de partir de celle-ci.


Fichiers et répertoires standard

En règle générale, on peut aussi, dans une application, ajouter des répertoires ou fichiers plus ou moins standard, tels que :

  • templates : Répertoire de templates (découverts automatiquement par défaut)
  • static : Répertoire de fichiers statiques spécifiques à l'application (ex. JS, CSS, images)

Lorsque nous ferons notre premier contenu HTML, nous y reviendrons.


Commandes django-admin

La commande django-admin, accessible partout, est disponible en ligne de commande dans le terminal et accepte les actions suivantes, entre autres :

  • startapp : Créer une nouvelle application
  • startproject : Créer un nouveau projet de site web

Commandes uniquement pour les projets

Certaines commandes de l'outil django-admin sont dépendantes de la configuration d'un projet, telle que précisée dans le module settings.py. C'est le cas par exemple des commandes suivantes :

  • runserver : lancer un serveur web de test du projet (utilise les paramètres)
  • makemigrations et migrate pour gérer la base de données (voir chapitre ORM)
  • makemessages et compilemessages pour les traductions (voir chapitre Traduction)

Si votre commande nécessite d'avoir accès aux paramètres d'un projet Django, vous devez, au lieu d'utiliser la commande django-admin, exécuter le module manage.py :

./manage.py runserver  # ou encore
python manage.py runserver

L'ensemble des commandes disponibles par défaut se trouve dans la documentation officielle.


Récapitulatif

Démarrer un projet minimal, c'est simple avec PyCharm (Community) :

  1. Créer un nouveau projet Python avec PyCharm
  2. Installer Django : pip install django{.bash}
  3. Démarrer un projet Django : django-admin startproject <name> .{.bash}
  4. Créer une application Django : django-admin startapp <name2>{.bash}
  5. Ajouter l'application au projet : INSTALLED_APPS = [..., "name2"]{.py}