Jan 25, 2025
Chaimaa C.
35minutes de lecture
Django est un framework web Python de haut niveau utilisé pour un développement rapide et une conception propre et pragmatique. Il simplifie de nombreuses tâches de développement web, vous permettant de vous concentrer sur l’écriture de votre application sans avoir à réinventer la roue.
Cela en fait l’un des frameworks web les plus populaires et les plus utilisés pour la création de sites web et d’applications dynamiques et basées sur les données.
Dans ce tutoriel, nous vous présenterons les principes fondamentaux de Django et vous fournirons une base solide pour construire votre première application web. Nous aborderons tout, de la configuration d’un VPS et de l’installation de Python au déploiement de votre projet Django.
À la fin de ce tutoriel, vous aurez une application web entièrement fonctionnelle et une solide compréhension de la façon de poursuivre le développement de vos propres projets à l’aide de Django. Que vous soyez novice en développement web ou que vous souhaitiez développer vos compétences, ce tutoriel Django vous aidera à maîtriser les bases.
Avant de vous plonger dans la construction de votre application Django, vous devez mettre en place votre environnement de développement. Ce processus comprend la mise en place d’un VPS, l’installation de Python, la création d’un environnement virtuel et l’installation de Django.
Avant de commencer à travailler avec Django, il est important d’avoir une compréhension de base de certains concepts. Voici ce que vous devez connaître :
Avec ces prérequis, vous serez bien préparé pour comprendre et suivre les étapes nécessaires à l’installation de Django et à la création de vos applications web.
Le choix d’un environnement d’hébergement approprié est crucial pour le bon fonctionnement de votre application Django. Un serveur privé virtuel (VPS) offre plus de contrôle, d’évolutivité et de ressources que l’hébergement mutualisé, ce qui le rend idéal pour les projets Django. L’hébergement VPS Django d’Hostinger est un excellent choix, offrant des plans abordables ainsi que des serveurs faciles à configurer et à gérer.
Lorsque vous choisissez un plan VPS chez Hostinger, tenez compte des besoins de votre projet :
Pour un projet Django de base, un plan VPS de niveau inférieur comme KVM 1 ou KVM 2 devrait être suffisant, mais au fur et à mesure que votre projet grandit, vous pouvez facilement passer à des options de niveau supérieur pour plus de ressources.

Une fois que vous avez choisi un plan VPS et effectué l’achat, suivez les étapes suivantes pour configurer le serveur :

Cliquez sur Configuration et Commencer maintenant dans la fenêtre suivante.

ssh root@votre_ip_vps
Remplacez votre_ip_vps par l’adresse IP du VPS de Hostinger. Vous serez invité à entrer votre mot de passe root.
apt update && apt upgrade -y
Le VPS étant prêt, vous pouvez maintenant installer Python et les autres dépendances nécessaires au développement de Django.
Pour faire fonctionner Django, vous devez installer Python et pip sur votre VPS. La plupart des distributions Linux modernes, comme Ubuntu, sont livrées avec Python préinstallé.
Si vous ne l’avez pas installé ou si vous devez le mettre à jour, vous pouvez le faire facilement. Utilisez les commandes suivantes pour vérifier la version actuelle de Python et installer la dernière version de Python 3 :
python3 --version

Si votre interface de ligne de commande renvoie le numéro de version de Python, le langage de programmation est déjà installé. Dans ce cas, il suffit d’installer pip :
apt install python3-pip
apt install python3 python3-pip -y
Une fois Python installé, vous êtes prêt à mettre en place un environnement virtuel.
Un environnement virtuel est un espace isolé dans lequel vous pouvez installer des paquets Python et des dépendances pour un projet spécifique. Cette méthode n’affecte pas l’environnement Python du système ni les autres projets.
Ceci est crucial lorsque l’on travaille avec Django, car différents projets peuvent nécessiter différentes versions de paquets. Un environnement virtuel permet de s’assurer que les dépendances de chaque projet sont bien contenues et n’entrent pas en conflit avec d’autres.
Pourquoi utiliser un environnement virtuel :
Suivez les étapes suivantes pour configurer un environnement virtuel sur votre VPS :
apt install python3-venv -y
mkdir myprojectcd myproject
Remplacez myproject par le nom que vous souhaitez donner à votre dossier de projet.
python3 -m venv env_name
source env_name/bin/activate
Une fois activée, l’invite de l’interpréteur de commandes change pour refléter l’environnement (par exemple, (nom_env)), indiquant que vous travaillez dans votre environnement virtuel.
Cette configuration garantit que toutes les dépendances liées à Django sont isolées dans l’environnement virtuel, ce qui permet à votre serveur de rester propre et organisé.
Une fois votre environnement virtuel mis en place, l’étape suivante consiste à installer le framework web lui-même, ce que vous pouvez faire à l’aide du gestionnaire de paquets de Python, pip. L’installation de Django dans votre environnement virtuel permet de l’isoler des autres projets et de le gérer indépendamment.
Pour installer Django, suivez les étapes suivantes :
pip install django
Cela permet de télécharger et d’installer toutes les dépendances et le framework web Django dans l’environnement virtuel.
django-admin --version

Vous obtiendrez ainsi la version de Django actuellement installée dans votre environnement, ce qui confirme que l’installation s’est déroulée avec succès.
Avec votre VPS préparé pour l’hébergement Django, vous pouvez commencer à construire votre application.
Il est temps de créer votre première application Django. Dans cette section, vous établirez la base de code nécessaire pour commencer à développer votre site web.
Créons un nouveau projet Django :
django-admin startproject myproject
Cela créera un nouveau répertoire nommé myproject contenant la structure du projet par défaut.
cd myproject/myproject
vim settings.py
Localisez le paramètre ALLOWED_HOSTS et modifiez-le pour ajouter l’IP de votre VPS comme suit :
ALLOWED_HOSTS = ['votre_ip_vps']
Remplacez votre_ip_vps par l’IP réelle de votre VPS dans la console Hostinger.
python manage.py runserver 0.0.0.0:8000
Maintenant, ouvrez votre navigateur et allez sur http://votre_ip_vps:8000/ – remplacez votre_ip_vps par l’IP de votre VPS. Si tout a été fait correctement, vous devriez voir la page de bienvenue de Django :

Si vous avez suivi ces étapes, vous avez construit et exécuté avec succès un projet Django par défaut sur votre VPS. Le reste de ce tutoriel Django va plus loin dans le développement de l’application et la compréhension de Django en général.
L’exécution de la commande startproject crée une structure de projet Django de base qui comprend plusieurs fichiers et répertoires clés. Voici une décomposition de la structure et de l’objectif de chaque composant :

Chacun de ces fichiers et répertoires joue un rôle spécifique dans votre projet Django :
Il s’agit d’un utilitaire en ligne de commande qui vous aide à interagir avec votre projet Django. Vous l’utilisez pour des tâches telles que l’exécution du serveur de développement, la migration des bases de données et la gestion de votre application.
Voici à quoi il ressemble :

Voici ses principales fonctions :

Définit la variable d’environnement pour indiquer à Django le fichier de configuration à utiliser.

Exécute diverses commandes Django telles que runserver, migrate et autres.
Le répertoire interne du projet qui contient les paramètres de base, les configurations et d’autres fichiers par défaut pour un projet Django.
Ce fichier marque le répertoire comme un paquetage Python, permettant au code d’être importé comme un module dans Python. Il est vide par défaut.
Il s’agit de l’un des fichiers les plus importants de Django. Il contient tous les paramètres de configuration de votre projet, y compris les configurations de base de données, les applications installées, les intergiciels et les paramètres des fichiers statiques.
Ce fichier définit les routes URL pour votre application. Il associe les URL aux vues qui traitent les demandes et renvoient les réponses.

Au fur et à mesure que vous ajouterez des fonctionnalités à votre application, vous étendrez urlpatterns pour inclure les routes de vos propres vues.
Ce fichier fournit un point d’entrée aux serveurs web compatibles ASGI pour servir votre projet. ASGI (Asynchronous Server Gateway Interface) est la norme pour les applications asynchrones de Django.

Ce fichier est le point d’entrée pour les serveurs web compatibles WSGI tels que Gunicorn ou uWSGI pour servir votre projet dans un environnement de production.

Comprendre le rôle de chaque fichier et répertoire vous permettra de modifier les paramètres, d’ajouter des URL et de gérer la structure de votre projet.
Une fois votre projet Django mis en place et opérationnel, l’étape suivante consiste à se plonger dans l’un des composants centraux de toute application web : la gestion des données. Explorons comment Django gère les modèles et les bases de données afin d’alimenter des applications dynamiques et axées sur les données.
Dans Django, les modèles définissent la structure des tables de votre base de données. Il s’agit de classes Python qui correspondent directement aux tables de la base de données, ce qui vous permet d’interagir avec vos données de manière pratique. Chaque classe de modèle représente une table et chaque attribut de modèle représente un champ de la table.
Django fait abstraction du code SQL, ce qui facilite la création, la mise à jour et la gestion des bases de données sans avoir à écrire des requêtes SQL brutes.
Création d’un modèle
Pour créer un modèle, vous devez définir une classe Python dans le fichier models.py de l’une de vos applications. Chaque attribut de la classe correspond à un champ de la base de données et Django gère automatiquement la structure de la base de données sous-jacente.
Voici un exemple de modèle simple dans Django :
# Dans le fichier models.py de votre application
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
published_date = models.DateField()
isbn = models.CharField(max_length=13, unique=True)
def __str__(self):
return self.titleLa méthode __str__() garantit que lorsque vous demandez un livre, le titre du livre sera renvoyé sous la forme d’une chaîne de caractères.
Ajouter le modèle à la base de données
Une fois que vous avez créé votre modèle, Django doit le traduire en une table de base de données. Cela se fait par le biais des migrations, qui sont des fichiers que Django utilise pour garder une trace des modifications apportées à vos modèles.
python manage.py makemigrations
Django analysera les changements dans votre fichier models.py et générera un fichier de migration décrivant ces changements dans des instructions de type SQL.
Vous obtiendrez un résultat similaire à celui-ci :
Migrations for 'myapp':
myapp/migrations/0001_initial.py
- Create model Bookpython manage.py migrate
Cela créera les tables nécessaires dans votre base de données. Désormais, le modèle Book est représenté par une table Book correspondante dans votre base de données, et vous pouvez commencer à ajouter, interroger et gérer des données.
Django prend en charge plusieurs bases de données, ce qui vous permet de choisir celle qui convient le mieux à votre projet. La base de données par défaut de Django est SQLite, qui est légère et facile à configurer, ce qui la rend idéale pour le développement et les petits projets.
Cependant, pour les environnements de production, des bases de données plus robustes telles que PostgreSQL, MySQL ou MariaDB sont recommandées en raison de leur évolutivité et de leurs performances.
Django fournit un support intégré pour toutes ces bases de données. Commençons par configurer la base de données SQLite par défaut.
Configuration de la base de données SQLite par défaut
Par défaut, Django est configuré pour utiliser SQLite, qui est préinstallé avec Python, de sorte qu’aucune configuration supplémentaire n’est nécessaire. Voici comment vous assurer que votre projet est prêt à utiliser SQLite :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}python manage.py migrate
Cette commande crée le fichier db.sqlite3 à la racine du répertoire de votre projet et met en place toutes les tables nécessaires à l’exécution de votre application.
Une fois que vous avez configuré la base de données SQLite par défaut pour le développement, vous pouvez avoir besoin d’intégrer un système de gestion de base de données (SGBD) plus robuste au fur et à mesure que votre projet grandit. Django prend en charge plusieurs SGBD, dont PostgreSQL, MySQL, MariaDB et Oracle, chacun ayant ses propres atouts et son propre processus d’intégration.
Passons en revue chacune des options :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}Notez que SQlite ne requiert que 2 paramètres – ENGINE et NAME.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}Différences : Contrairement à SQLite, PostgreSQL est une base de données complète qui prend en charge plusieurs utilisateurs simultanés, des requêtes avancées et des transactions. Vous devrez installer PostgreSQL sur votre serveur, créer une base de données et un utilisateur, et gérer des configurations plus complexes.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # or 'django.db.backends.mariadb' for MariaDB
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '3306',
}
}Différences : MySQL et MariaDB sont réputés pour leurs performances avec les grands ensembles de données et les applications web à fort trafic. Ils prennent en charge plusieurs moteurs de stockage, des lectures rapides et peuvent traiter rapidement des millions de requêtes.
Alors, lequel choisir ? Simplifions les choses :
Configuration de PostgreSQL avec Django
Dans cette section, nous verrons comment intégrer PostgreSQL à Django, car c’est l’une des bases de données les plus couramment utilisées pour les applications de production.
sudo apt update
sudo apt install postgresql postgresql-contrib
pip install psycopg2
sudo -u postgres psql
CREATE DATABASE mydatabase;
CREATE USER mydatabaseuser WITH PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydatabaseuser;
\q
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost', # Use '127.0.0.1' if 'localhost' doesn't work
'PORT': '5432', # Default PostgreSQL port
}
}Les valeurs PASSWORD et USER doivent correspondre à celles que vous avez définies à l’étape 5.
python manage.py migrate
Cette commande créera les tables nécessaires dans votre base de données PostgreSQL.
python manage.py runserver
Ouvrez http://127.0.0.1:8000/ dans votre navigateur. Si la page d’accueil de Django s’affiche sans erreur, votre connexion à la base de données fonctionne correctement.
Avec votre base de données PostgreSQL entièrement intégrée, Django est maintenant prêt à gérer des ensembles de données plus importants et plus complexes, ce qui rend votre projet évolutif et prêt pour la production.
Une fois la base de données et les modèles mis en place pour gérer les données de votre application, l’étape suivante consiste à afficher ces informations aux utilisateurs et à créer des interfaces interactives.
C’est là qu’interviennent les vues et les templates, qui vous permettent de définir la logique et la structure des pages web avec lesquelles les utilisateurs interagiront.
Dans Django, les vues sont un composant essentiel qui définit la logique derrière ce qu’un utilisateur voit lorsqu’il interagit avec votre application.
En termes simples, une vue prend une requête web, la traite et renvoie une réponse, généralement sous la forme d’une page HTML rendue. Les vues font le lien entre votre base de données et l’interface utilisateur grâce à l’utilisation de modèles et de gabarits.
Il existe deux types principaux de vues dans Django : Les vues basées sur les fonctions (FBV) et les vues basées sur les classes (CBV). Ces deux types de vues ont le même objectif, mais offrent différentes manières d’organiser le code.
Vues basées sur les fonctions (FBV)
Les vues basées sur des fonctions sont des fonctions Python simples qui acceptent un objet de requête et renvoient une réponse. Elles sont souvent utilisées pour des cas d’utilisation plus simples ou lorsque vous avez besoin de plus de contrôle sur le flux de la logique.
Voici un exemple d’un simple FBV qui rend un modèle HTML :
from django.shortcuts import render
# Vue basée sur des fonctions
def homepage(request):
return render(request, 'homepage.html')Dans cet exemple :
Les FBV sont faciles à comprendre et à mettre en œuvre, mais lorsque les vues deviennent plus complexes, par exemple lorsqu’elles impliquent des formulaires ou l’authentification, elles peuvent devenir plus difficiles à maintenir.
Vues par classe (CBV)
Les vues basées sur les classes, quant à elles, vous permettent de structurer les vues plus efficacement en utilisant les principes de la programmation orientée objet. Les CBV sont plus flexibles et réutilisables puisqu’elles sont basées sur les classes Python.
Django fournit des vues génériques intégrées, comme ListView et DetailView, qui gèrent les cas d’utilisation courants. Ces vues vous permettent de vous concentrer sur leur personnalisation plutôt que sur la réécriture d’une logique répétitive.
Voici un exemple d’un CBV qui remplit la même fonction que le FBV précédent :
from django.views.generic import TemplateView
# Vue basée sur une classe
class HomePageView(TemplateView):
template_name = 'homepage.html'Dans cet exemple :
Pour utiliser cette CBV dans la configuration de l’URL, vous devez inclure la méthode .as_view() lorsque vous l’ajoutez à urls.py :
from django.urls import path
from .views import HomePageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
]Quand utiliser les FBV ou les CBV ?
Les FBV et les CBV font tous deux partie intégrante de Django, et le choix entre les deux dépend des exigences de votre projet et de vos préférences personnelles.
Le système de templates de Django est conçu pour séparer la présentation des données de la logique sous-jacente. Les templates sont essentiellement des fichiers HTML qui contiennent un contenu dynamique, vous permettant d’afficher des données passées depuis vos vues. Le langage de template de Django (DTL) fournit des placeholders et de la logique, comme des boucles et des conditionnelles, pour insérer des données dynamiques dans le HTML.
Les templates jouent un rôle crucial dans la définition de l’aspect et de la convivialité de vos pages web, tout en maintenant une séparation nette entre la logique, qui est gérée par les vues, et l’interface utilisateur.
Création d’un template
Pour créer un template dans Django, vous devez créer un fichier HTML dans un répertoire templates. La structure du répertoire peut ressembler à ceci :
myproject/ │ ├── myapp/ │ ├── templates/ │ │ └── myapp/ │ │ └── homepage.html │ └── views.py │ └── manage.py
Dans cette structure, Django recherche automatiquement les templates dans le répertoire templates de votre application. Vous pouvez également organiser les templates dans des dossiers spécifiques à l’application (comme myapp/homepage.html), en veillant à ce que chaque application ait ses propres templates.
Voici un exemple de template simple (homepage.html) :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home</title>
</head>
<body>
<h1>Welcome to {{ site_name }}</h1>
<p>{{ message }}</p>
</body>
</html>Dans ce template, {{ site_name }} et {{ message }} sont des espaces réservés qui seront remplis avec des données dynamiques transmises par la vue.
Rendu d’un template dans une vue
Pour effectuer le rendu d’un template, vous devez le passer à la vue à l’aide de la fonction render() de Django. Voici un exemple de rendu du template homepage.html avec quelques données contextuelles dans une vue basée sur une fonction (FBV) :
from django.shortcuts import render
def homepage(request):
context = {
'site_name': 'My Django Website',
'message': 'This is the homepage content!'
}
return render(request, 'myapp/homepage.html', context)Dans cet exemple :
Lorsqu’un utilisateur visite cette page, les espaces réservés {{ site_name }} et {{ message }} du template seront remplacés respectivement par “My Django Website” et “This is the homepage content!”.
Balises et filtres de templates
Les templates Django prennent également en charge les balises de template et les filtres, qui vous permettent d’ajouter du contenu dynamique et de la logique dans vos fichiers HTML.
{% if user.is_authenticated %}
<p>Welcome back, {{ user.username }}!</p>
{% else %}
<p>Hello, Guest!</p>
{% endif %}<p>Published on {{ article.published_date|date:"F j, Y" }}</p>Extension des templates
Django prend en charge l’héritage de templates, ce qui permet de créer des templates de base que d’autres templates peuvent étendre. Ceci est particulièrement utile pour maintenir une mise en page cohérente sur plusieurs pages, comme un en-tête et un pied de page communs.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<header>
<h1>Site Header</h1>
</header>
<main>
{% block content %}
<!-- Page-specific content goes here -->
{% endblock %}
</main>
<footer>
<p>Footer Content</p>
</footer>
</body>
</html>{% extends 'base.html' %}
{% block title %}Home Page{% endblock %}
{% block content %}
<h2>Welcome to the homepage!</h2>
<p>This is the homepage content.</p>
{% endblock %}En étendant le template de base, vous pouvez réutiliser l’en-tête et le pied de page sur différentes pages, en conservant une mise en page cohérente et en évitant les répétitions.
Utilisation de fichiers statiques dans les templates
Les templates vous permettent également de faire référence à des fichiers statiques (tels que CSS, JavaScript ou des images) à l’aide de la balise de template {% static %}. Par exemple, pour inclure un fichier CSS :
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">Assurez-vous d’avoir configuré correctement vos répertoires de fichiers statiques dans settings.py :
STATIC_URL = '/static/'
En utilisant efficacement le système de templates de Django, vous pouvez créer des pages web dynamiques, basées sur des données, et maintenir une séparation nette entre la logique et la présentation.
Le distributeur d’URL de Django s’appuie sur des expressions régulières ou des convertisseurs de chemin pour faire correspondre les demandes d’URL entrantes avec des vues spécifiques. Ces motifs d’URL sont définis dans urls.py, et Django utilise cette configuration pour déterminer quelle vue doit traiter une requête particulière.
Chaque projet Django possède généralement deux niveaux de configuration d’URL :
Configuration de base de l’URL
Voyons comment un projet simple peut mettre en place des modèles d’URL :
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), # Site d'admin
path('', include('myapp.urls')), # Inclure les URLs au niveau de l'application pour "myapp"
]from django.urls import path
from . import views
urlpatterns = [
path('', views.homepage, name='home'), # Associe l'URL racine à la vue homepage
path('about/', views.about, name='about'), # Associe "/about/" à la vue about
]Routage d’URL avec des vues basées sur des fonctions (FBV)
Voici à quoi pourraient ressembler les vues correspondantes dans views.py pour la configuration d’URL ci-dessus :
from django.shortcuts import render
def homepage(request):
return render(request, 'homepage.html')
def about(request):
return render(request, 'about.html')Cette configuration lie la page d’accueil “homepage” et l’URL “about” à leurs vues respectives, ce qui garantit que lorsqu’un utilisateur visite http://example.com/ ou http://example.com/about/, le template correct est affiché.
Routage d’URL avec des vues basées sur des classes (CBV)
Vous pouvez également faire correspondre des URL à des vues basées sur des classes (CBV), qui sont gérées de manière légèrement différente. Voici un exemple de mappage d’une URL CBV :
from django.urls import path
from .views import HomePageView, AboutPageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
path('about/', AboutPageView.as_view(), name='about'),
]Et les vues basées sur les classes correspondantes dans views.py :
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = 'homepage.html'
class AboutPageView(TemplateView):
template_name = 'about.html'Dans ce cas, la méthode .as_view() est utilisée pour lier les vues basées sur les classes aux modèles d’URL.
Paramètres d’URL et routage dynamique
Django vous permet également de capturer des paramètres d’URL et de les passer aux vues, ce qui est utile pour le mappage dynamique d’URL pour des choses comme des articles de blog ou des pages de produits.
Voici un exemple où l’URL capture un paramètre entier :
from django.urls import path
from . import views
urlpatterns = [
path('article/<int:id>/', views.article_detail, name='article_detail'),
]Dans ce cas, <int:id> capture un nombre entier à partir de l’URL et le transmet à la vue article_detail en tant qu’argument :
def article_detail(request, id):
# Fetch the article using the provided ID
article = get_object_or_404(Article, pk=id)
return render(request, 'article_detail.html', {'article': article})Si un utilisateur visite http://example.com/article/5/, Django transmettra 5 comme argument id à la vue article_detail, ce qui vous permettra de récupérer et d’afficher l’article en question.
Modèles d’URL nommés
Il est conseillé de nommer vos modèles d’URL. Cela vous permet de référencer les URL par leur nom dans vos templates et vos vues plutôt que de les coder en dur.
Dans l’exemple urls.py ci-dessus, chaque URL a un argument name :
path('about/', views.about, name='about')Dans vos templates, vous pouvez alors utiliser la balise template {% url %} pour faire référence à ces URL nommées :
<a href="{% url 'about' %}">About Us</a>Ainsi, si l’URL about change un jour, il suffit de la mettre à jour dans la configuration de l’URL plutôt que dans chaque template.
En configurant et en utilisant les modèles d’URL de Django, vous pouvez faire correspondre efficacement différentes URL à leurs vues respectives. Cette flexibilité vous permet de gérer à la fois des pages statiques simples et un contenu dynamique plus complexe, adapté à la saisie de l’utilisateur.
Nous avons mis en place des vues, des templates et des modèles d’URL. Maintenant, pour construire une application Django pleinement fonctionnelle, nous devons commencer à manipuler des fichiers statiques, tels que CSS, JavaScript et des images.
Heureusement, Django offre un moyen simple et efficace de gérer les fichiers statiques, en s’assurant qu’ils sont correctement servis et organisés pendant le développement et le déploiement.
Mise en place de fichiers statiques dans Django
Pour gérer les fichiers statiques dans Django, vous devez configurer votre projet pour qu’il sache où les rechercher et les servir.
Définir l’URL statique et le répertoire dans settings.py :
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static", # Optional: Add this if you want to store static files in a 'static' folder within your project
]Par défaut, Django recherche également les fichiers statiques dans le répertoire static de chaque application. Par exemple, si vous avez une application nommée myapp, vous pouvez créer une structure de dossiers comme celle-ci :
myapp/ │ ├── static/ │ └── myapp/ │ └── style.css └── views.py
Django reconnaîtra et servira automatiquement ces fichiers pendant le développement.
Utilisation de fichiers statiques dans les templates
Pour utiliser des fichiers statiques dans vos templates, vous devez d’abord charger la balise de template {% static %} de Django. Ensuite, vous pouvez référencer vos fichiers statiques par leurs chemins relatifs :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home Page</title>
{% load static %}
<link rel="stylesheet" href="{% static 'myapp/style.css' %}">
</head>
<body>
<h1>Welcome to My Django App</h1>
<img src="{% static 'myapp/images/logo.png' %}" alt="Logo">
</body>
</html>Dans cet exemple :
Collecte des fichiers statiques pour le déploiement
Pendant le développement, Django sert automatiquement les fichiers statiques lorsque DEBUG = True. Cependant, en production, Django ne sert pas les fichiers statiques directement. Au lieu de cela, vous devez collecter tous les fichiers statiques à partir de différents emplacements et les stocker dans un seul répertoire.
Pour ce faire, Django fournit la commande de gestion collectstatic :
INSTALLED_APPS = [
# Other installed apps
'django.contrib.staticfiles',
]STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_ROOT : Définit le répertoire dans lequel Django collectera les fichiers statiques pour le déploiement.
python manage.py collectstatic
Cette commande collecte tous les fichiers statiques du répertoire static de chaque application et de tout autre emplacement spécifié dans STATICFILES_DIRS, puis les stocke dans le répertoire STATIC_ROOT.
Servir des fichiers statiques en production
Dans un environnement de production, vous utilisez généralement un serveur web (comme Nginx ou Apache) pour servir les fichiers statiques. Django recommande de configurer votre serveur web pour qu’il serve efficacement le contenu statique, réduisant ainsi la charge sur votre application Django.
Voici comment vous pourriez configurer le service de fichiers statiques dans une installation Nginx :
server {
listen 80;
server_name yourdomain.com;
location /static/ {
alias /path/to/your/project/staticfiles/; # The path to STATIC_ROOT
}
location / {
proxy_pass http://127.0.0.1:8000; # Pass requests to Django app
}
}Dans cette configuration, Nginx sert les fichiers statiques directement depuis le répertoire /static/, tout en transmettant toutes les autres requêtes à l’application Django.
En gérant correctement les fichiers statiques dans Django, vous vous assurez que votre application n’est pas seulement belle avec des styles et des images, mais qu’elle fonctionne aussi efficacement lorsqu’elle est déployée.
Au fur et à mesure que nous créons des applications web plus dynamiques et plus complexes, la nécessité de gérer les utilisateurs, de sécuriser le contenu et de contrôler l’accès devient critique.
Django fournit un système d’authentification intégré qui facilite la gestion de la connexion, de la déconnexion, de l’enregistrement et des autorisations des utilisateurs. Cela permet à un développeur Django de gérer efficacement l’authentification et l’autorisation des utilisateurs.
Le système d’authentification intégré de Django simplifie la gestion des utilisateurs avec des fonctionnalités telles que la connexion, la déconnexion, la gestion des mots de passe et l’enregistrement. Par défaut, Django offre une fonctionnalité de modèle d’utilisateur et des vues d’authentification qui gèrent la plupart de ces tâches.
Configuration de la connexion et de la déconnexion des utilisateurs
Pour mettre en œuvre les fonctionnalités de connexion et de déconnexion, vous pouvez utiliser les vues intégrées de Django qui se trouvent dans django.contrib.auth.views. Ces vues gèrent le processus d’authentification et simplifient le code nécessaire à ces opérations.
from django.urls import path
from django.contrib.auth import views as auth_views
urlpatterns = [
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]<form method="post">
{% csrf_token %}
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Login</button>
</form>Ce template gère l’authentification de l’utilisateur lorsqu’un nom d’utilisateur et un mot de passe valides sont soumis.
<a href="{% url 'logout' %}">Logout</a>Création d’une vue d’enregistrement des utilisateurs
Django ne fournit pas de vue d’enregistrement intégrée par défaut, mais vous pouvez en créer une en utilisant UserCreationForm de Django :
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user) # Automatically log the user in after registration
return redirect('home') # Redirect to home page after successful registration
else:
form = UserCreationForm()
return render(request, 'register.html', {'form': form})urlpatterns = [
path('register/', views.register, name='register'),
]<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>Cette vue d’enregistrement permet aux utilisateurs de créer un compte à l’aide d’un simple formulaire. Une fois l’inscription réussie, les utilisateurs sont automatiquement connectés.
L’autorisation de l’utilisateur permet de contrôler l’accès à certaines vues et actions en fonction des permissions ou des rôles de l’utilisateur. Le système de permissions de Django facilite la gestion des utilisateurs qui peuvent accéder à des parties spécifiques de votre application.
Restreindre l’accès à l’aide d’une connexion obligatoire
Pour restreindre l’accès à certaines vues, vous pouvez utiliser le décorateur @login_required de Django, qui garantit que seuls les utilisateurs authentifiés peuvent accéder à une vue :
from django.contrib.auth.decorators import login_required
@login_required
def dashboard(request):
return render(request, 'dashboard.html')Cela garantit que si un utilisateur n’est pas connecté, il sera redirigé vers la page de connexion.
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
class DashboardView(LoginRequiredMixin, TemplateView):
template_name = 'dashboard.html'Gestion des autorisations des utilisateurs
Django vous permet d’attribuer différentes permissions aux utilisateurs et aux groupes, qui peuvent être utilisées pour contrôler l’accès à des vues ou à des actions spécifiques. Les permissions peuvent être ajoutées aux modèles d’utilisateurs et vérifiées dans vos vues.
from django.contrib.auth.decorators import permission_required
@permission_required('app.add_article')
def add_article(request):
# View code for adding an articleSeuls les utilisateurs disposant de l’autorisation add_article pourront accéder à cette vue.
Restreindre l’accès en fonction des rôles des utilisateurs
La fonction de groupes de Django vous permet de créer des rôles (tels que “editor ou “viewer”) et d’assigner des utilisateurs à ces groupes. Vous pouvez ensuite vérifier l’appartenance d’un utilisateur à un groupe pour en contrôler l’accès.
from django.contrib.auth.models import Group, User group = Group.objects.get(name='editors') user = User.objects.get(username='john') user.groups.add(group) # Affecte l'utilisateur au groupe 'editors'
from django.contrib.auth.decorators import user_passes_test
def is_editor(user):
return user.groups.filter(name='editors').exists()
@user_passes_test(is_editor)
def editor_dashboard(request):
return render(request, 'editor_dashboard.html')Dans cet exemple, seuls les utilisateurs appartenant au groupe “editors” peuvent accéder à la vue editor_dashboard.
En tirant parti des systèmes d’authentification et d’autorisation intégrés à Django, vous pouvez gérer en toute sécurité la connexion, l’enregistrement et les autorisations des utilisateurs, en veillant à ce que les contenus sensibles soient protégés et que l’accès soit correctement contrôlé.
Après la mise en œuvre de l’authentification et de l’autorisation de l’utilisateur, la prochaine fonctionnalité cruciale de toute page web est le traitement des entrées de l’utilisateur par le biais de formulaires. Django fournit un système puissant et flexible pour créer, traiter et valider les formulaires.
Le système de gestion des formulaires de Django est construit sur des classes Python qui représentent les formulaires comme des objets. Ces formulaires peuvent être rendus dans des templates, validés et traités en utilisant seulement quelques lignes de code. Les formulaires peuvent être créés manuellement à l’aide de la classe Form de Django ou générés automatiquement à partir de modèles à l’aide de ModelForm.
Pour créer un formulaire dans Django, vous commencez par définir une classe de formulaire dans votre fichier forms.py. Cette classe définira les champs et les règles de validation.
# forms.py
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100, label='Votre Nom')
email = forms.EmailField(label='Votre Email')
message = forms.CharField(widget=forms.Textarea, label='Votre Message')Ce formulaire comprend trois champs : le nom, l’adresse électronique et le message. Chaque champ est représenté par une classe de champ de formulaire, telle que CharField pour le texte court, EmailField pour les courriels et Textarea pour les entrées de texte plus longues.
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Envoyer le Message</button>
</form># views.py
from django.shortcuts import render
from .forms import ContactForm
def contact_view(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# Traiter les données, par exemple envoyer un e-mail ou les enregistrer dans la base de données
name = form.cleaned_data['name']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
# Rediriger vers une page de succès ou afficher un message de succès
return render(request, 'thanks.html')
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})Dans cette vue :
Les formulaires de Django sont dotés d’une validation intégrée qui garantit que les données soumises sont correctes et sécurisées. Les champs tels que EmailField valident automatiquement que l’entrée est une adresse électronique valide. Vous pouvez également créer une logique de validation personnalisée pour appliquer des règles spécifiques.
Validation intégrée
Django effectue automatiquement certains contrôles de validation pour vous :
Validation personnalisée
Vous pouvez également définir une logique de validation personnalisée en remplaçant la méthode clean() ou en créant des validateurs de champs personnalisés.
# forms.py
from django import forms
from django.core.exceptions import ValidationError
class ContactForm(forms.Form):
name = forms.CharField(max_length=100, label='Your Name')
email = forms.EmailField(label='Your Email')
message = forms.CharField(widget=forms.Textarea, label='Your Message')
def clean_name(self):
name = self.cleaned_data.get('name')
if "spam" in name.lower():
raise ValidationError("Invalid name: 'spam' is not allowed.")
return nameDans cet exemple, si le nom contient le mot spam, Django lèvera une erreur de validation.
<form method="post">
{% csrf_token %}
<div>
{{ form.name.label_tag }} {{ form.name }}
{% if form.name.errors %}
<div class="error">{{ form.name.errors }}</div>
{% endif %}
</div>
<div>
{{ form.email.label_tag }} {{ form.email }}
{% if form.email.errors %}
<div class="error">{{ form.email.errors }}</div>
{% endif %}
</div>
<div>
{{ form.message.label_tag }} {{ form.message }}
{% if form.message.errors %}
<div class="error">{{ form.message.errors }}</div>
{% endif %}
</div>
<button type="submit">Send Message</button>
</form>Les utilisateurs peuvent ainsi voir les messages d’erreur pertinents à côté des champs qu’ils doivent corriger.
Dans de nombreux cas, les formulaires sont liés à des modèles. Django facilite la création de formulaires directement à partir de modèles en utilisant ModelForm. Cela permet de gagner du temps en générant automatiquement des champs de formulaire basés sur les champs du modèle.
# models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)Vous pouvez créer un formulaire pour ce modèle comme suit :
# forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']# views.py
from django.shortcuts import render
from .forms import PostForm
def create_post(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save() # Enregistre les données du formulaire dans la base de données
return redirect('post_list') # Redirige vers une liste de posts
else:
form = PostForm()
return render(request, 'create_post.html', {'form': form})En utilisant ModelForm, Django génère automatiquement des champs de formulaire basés sur les champs du modèle Post et gère l’enregistrement du formulaire dans la base de données.
Une fois que votre application est entièrement développée et testée sur votre machine locale, l’étape finale consiste à la déployer sur un serveur réel afin que les utilisateurs puissent y accéder. Le déploiement d’un projet Django nécessite un examen attentif des meilleures pratiques pour garantir la sécurité, l’évolutivité et les performances. Dans cette section, nous aborderons les étapes essentielles du déploiement de votre application sur un VPS que tout développeur Django devrait connaître.
Avant de plonger dans les étapes techniques, il est important de suivre quelques bonnes pratiques lors de la préparation de votre projet Django pour le déploiement :
ALLOWED_HOSTS = ['votredomaine.com', 'www.votredomaine.com']
Maintenant que vous avez appris les meilleures pratiques pour préparer un projet Django, il est temps de le déployer sur un serveur privé virtuel (VPS). Dans cette section, nous vous guiderons à travers les étapes pour mettre en place votre serveur, configurer les services nécessaires et rendre votre application Django vivante et accessible aux utilisateurs.
Création d’un fichier requirements.txt en Python
Un fichier requirements.txt liste toutes les dépendances Python dont votre projet Django a besoin pour fonctionner. Ce fichier vous permet d’installer tous les paquets nécessaires en une seule commande.
Assurez-vous d’être dans le répertoire principal de votre projet, où vous avez le fichier manage.py, et assurez-vous que votre environnement virtuel est actif.
Ensuite, générez le fichier requirements.txt avec la commande suivante :
pip3 freeze > requirements.txt
Cette commande créera un fichier requirements.txt dans votre répertoire actuel avec tous les paquets installés et leurs versions que vous avez dans votre environnement virtuel actuel.
Ensuite, ouvrez requirements.txt et assurez-vous que toutes les dépendances nécessaires à l’exécution de votre projet y figurent.
Téléchargement du projet vers un dépôt distant (GitHub)
Avant de déployer votre projet sur un VPS, il est conseillé de télécharger votre code sur un dépôt distant, tel que GitHub, afin de contrôler les versions et de faciliter la collaboration. De plus, cela simplifie le processus de déploiement lui-même.
sudo apt install git-all
git init
venv/ __pycache__/ db.sqlite3 *.pyc *.log media/
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/url-to-repository-you-created
git branch -M main
git status
Confirmez que seuls les fichiers que vous souhaitez télécharger sont ajoutés et transférez-les dans le référentiel distant :
git push -u origin main
Préparez votre VPS et récupérez le code du projet
Ensuite, vous devez préparer votre VPS pour le déploiement et y télécharger votre code :
ssh root@votre_ip_vps
sudo apt install nginx
sudo pip3 install gunicorn
Nous utiliserons Nginx comme serveur web et Gunicorn comme serveur d’application.
git clone https://github.com/your-repository/project-name.git
cd project-name
python3 -m venv env_namesource env_name/bin/activate
pip3 install -r requirements.txt
python manage.py migrate
python manage.py collectstatic
sudo nano /etc/systemd/system/gunicorn.service
Ajoutez la configuration suivante :
[Unit] Description=gunicorn daemon After=network.target [Service] User=your-username Group=www-data WorkingDirectory=/your/project/directory ExecStart=/your/project/directory/env_name/bin/gunicorn --access-logfile - --workers 3 --bind unix:/your/project/directory.sock myproject.wsgi:application [Install] WantedBy=multi-user.target
Veillez à saisir votre nom d’utilisateur factuel et le chemin du répertoire du projet au lieu de your-username et /your/project/directory.
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo nano /etc/nginx/sites-available/myproject
Ajoutez la configuration suivante :
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://unix:/your/project/directory/project-name.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /your/project/directory/static/;
}
location /media/ {
alias /your/project/directory/media/;
}
}Veillez à saisir le chemin de votre répertoire factuel au lieu de /your/project/directory.
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo systemctl restart nginx
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
En suivant ces étapes, vous avez déployé avec succès votre application Django sur un VPS en utilisant les meilleures pratiques, en assurant à la fois la sécurité et la performance.
Avec Nginx et Gunicorn qui s’occupent du web et de l’application, votre application est maintenant prête à gérer du trafic en direct. Visitez votre domaine – si vous avez tout configuré correctement, vous devriez maintenant voir votre application web en direct.
Dans ce tutoriel, nous avons couvert les étapes essentielles pour démarrer avec Django, de la mise en place de votre environnement de développement au déploiement de votre projet sur un serveur virtuel. Vous avez appris à créer un projet, à gérer des modèles et à stocker des données, à construire des vues et des templates, à travailler avec des URL, à gérer des fichiers statiques, à mettre en œuvre l’authentification des utilisateurs et à déployer votre application sur un serveur live.
Avec ces compétences de base, vous êtes maintenant équipé pour commencer à construire vos propres projets Django. Qu’il s’agisse d’un simple blog ou d’une application web plus complexe, Django vous fournit les outils nécessaires pour donner vie à vos idées. Plongez, expérimentez et voyez ce que vous pouvez créer avec ce puissant framework web.
Django est un framework web Python de haut niveau conçu pour un développement rapide et une conception propre et pragmatique. Il simplifie le processus de création d’applications web en fournissant des composants réutilisables tels que l’authentification, l’ORM et le routage, tout en promouvant les meilleures pratiques telles que DRY (Don’t Repeat Yourself) et la sécurité.
Django est utilisé pour sa rapidité, sa sécurité et son évolutivité. Il simplifie le développement web grâce à des fonctionnalités intégrées telles que l’authentification, un ORM pour la gestion des bases de données et le routage des URL. Sa philosophie “batteries incluses” permet aux développeurs Django de créer rapidement des applications robustes tout en respectant les meilleures pratiques.
Oui, il est essentiel de connaître Python pour apprendre Django, un framework web basé sur Python. Une bonne connaissance de la syntaxe, des structures de données et de la programmation orientée objet de Python vous aidera à comprendre la structure et les fonctionnalités de Django, ce qui rendra le processus d’apprentissage plus fluide et plus efficace.
Tout le contenu des tutoriels de ce site est soumis aux normes éditoriales et aux valeurs rigoureuses de Hostinger.