12 KiB
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 d’entrée pour le serveur ASGI (pour les applications asynchrones). |
└── wsgi.py |
Point d’entré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 siteasgi.py
: fichier de serveur asynchrone pour la mise en productionwsgi.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 applicationstartproject
: 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
etmigrate
pour gérer la base de données (voir chapitre ORM)makemessages
etcompilemessages
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) :
- Créer un nouveau projet Python avec PyCharm
- Installer Django :
pip install django
{.bash} - Démarrer un projet Django :
django-admin startproject <name> .
{.bash} - Créer une application Django :
django-admin startapp <name2>
{.bash} - Ajouter l'application au projet :
INSTALLED_APPS = [..., "name2"]
{.py}