Apprendre django - Tutoriel Complet Débutants 2024

Article publié le et mis à jour le .

Apprendre django - Tutoriel Complet Débutants 2024

Pourquoi et comment apprendre django en 2024 ?

Django est le framework web puissant en Python le plus populaire. Il est utilisé par de nombreuses entreprises sur de nombreux projets. C’est un framework qui contient tout ce dont un développeur a besoin pour créer une application web.

Découvrez comment coder des applications web puissantes avec le framework django en Python.

Pourquoi apprendre django ?

Django est le framework le plus populaire en Python, il existe depuis 2005.

C’est un framework puissant et complet qui est utilisé en production par des énormes entreprises comme YouTube, Instagram, Spotify, Pinterest et plein d’autres entreprises.

Donc ça veut aussi dire que plein d’entreprises cherchent des développeurs django.

Les développeurs se font de plus en plus rares quand tout le monde se bouscule pour faire du javascript mais la demande de dev django reste toujours plus forte.

Django est facile à lire et écrire comme Python. Sa documentation est une des meilleurs et que j’ai vue et elle est accessible en français !

Django vient avec toutes les fonctionnalités dont vous avez besoin pour commencer à coder un site moderne.

Vous pouvez facilement créer une API pour votre site si vous voulez vous servir de django comme back-end et utiliser un front-end JavaScript comme react, vue, angular ou svelte par exemple.

Comment installer django ?

Pour installer django vous aurez besoin de Python, de pip et d’un accès à un terminal.

Vous pouvez aussi vous faciliter la vie avec un IDE comme PyCharm ou VScode avec l’extension Python.

Je vous conseille de commencer par créer un environnement virtuel.

Vous pouvez faire ça depuis votre IDE ou bien depuis un terminal.

Vous pouvez avoir accès à un terminal :

  • Sur PyCharm c’est raccourci pour lancer un terminal.
  • Sur VSCode avec le raccourci CTRL + J ou CMD + J.

Vous pouvez aussi lancer soit le powershell sur Windows, soit iTerm ou terminal sur mac et votre terminal préféré sur Linux.

Une fois dans le terminal, tapez python venv -m nom_de_votre_site puis de rentrer dedans avec source bin/activate.

Et puis vous pouvez installer django avec pip install django.

python venv -m nom_de_votre_site
cd nom_de_votre_site
source bin/activate
pip install django

Pour créer un nouveau projet django on fait django-admin startproject nom_de_votre_projet

Puis rendez-vous dans votre site avec cd nom_de_votre_projet ou ouvrez le avec VSCode par exemple.

Vous pouvez lancer le projet avec la commande python manage.py runserver

django-admin startproject nom_de_votre_projet
python manage.py runserver

Et sur localhost:8000 vous verrez votre site !

Le fichier manage.py

Le premier fichier django qu’on va voir est le fichier manage.py.

Le fichier manage.py est un outil de ligne de commande qui vous permet de d’interagir avec votre projet Django de manière interactive depuis le terminal.

C’est un fichier de base qui est généré quand on crée un nouveau fichier avec la commande django-admin startproject.

Ce fichier va nous servir pour :

  • lancer un serveur de développement
  • créer des utilisateurs (et super utilisateurs)
  • créer des applications dans notre projets
  • créer et lancer des migrations (on verra ça plus tard)
  • lancer des tests
  • collecter les fichiers statics
  • lancer le shell de django

Et chaque nouvelle application ou bibliothèque qu’on va installer nous donnera accès à de nouvelles commandes.

Donc on sait de quoi est composé le fichier manage.py, et pour l’utiliser on va faire python manage.py suivi de la commande que vous voulez.

Commençons avec python manage.py runserver pour lancer le serveur de développement.

On voit qu’on a une erreur en rouge qui nous dit que des migrations existent mais n’ont pas été appliquées.

Donc on va couper le serveur en faisant CTRL+C et puis la commande python manage.py migrate.

On voit que django nous applique des migrations pour des utilisateurs et des groupes.

Si on relance le serveur de développement avec python manage.py runserver, l’erreur n’est plus la !

python manage.py runserver
python manage.py migrate
python manage.py runserver

Le fichier settings.py

Le fichier settings.py c’est un fichier qui permet de configurer votre projet.

Il fait un un peu plus de cent lignes de code de base et vous trouverez dedans :

  • les applications installées
  • les chemins vers vos templates, fichiers statics et media
  • la configuration de langue et d’heure

C’est aussi là que vous pouvez choisir et configurer votre base de donnée. Et plein d’autres choses.

Vous trouverez aussi le token de votre projet, c’est une sorte de clé privée qu’il ne faut pas partager.

Mais la si vous publiez votre projet sur github par exemple, votre fichier settings.py vient avec de base.

C’est pas tres pratique de mettre tout le fichier settings.py dans le gitignore donc d’habitude on crée un fichier local_settings.py.

C’est un fichier qui contiendra vos données sensibles comme le token de votre projet ou la configuration, et donc le mot de passe, de votre base de donnee.

On va donc créer un fichier local_settings.py, mettre le token et puis l’importer dans settings.

local_settings.py :

TOKEN = "..."

Et puis dans settings.py on doit modifier les variables qu’on veut importer depuis local_settings.

settings.py :

import local_settings

TOKEN = local_settings.TOKEN

Maintenant si vous décidez de le push sur github ou ailleurs, n’oubliez pas de l’exclure avec un fichier gitignore par exemple pour qu’il ne soit pas pris en compte dans vos commit.

Les Vues (views)

Dans Django, les vues (views) sont des fonctions ou des classes Python qui définissent la logique derrière le traitement des requêtes HTTP.

Ces vues sont responsables de la récupération des données nécessaires, de l’interaction avec les modèles si nécessaire, et de la préparation des données à afficher dans les templates.

Le fichier views.py dans chaque application Django contient ces vues.

Le fichier views.py permet de :

  • répondre aux requêtes HTTP
  • interagir avec les modèles
  • preparer les données pour les templates
  • renvoyer des réponses HTTP

Donc concrètement, un fichier views.py peut ressemble à ça :

On a une fonction home qui renvoie une réponse http et affichera du texte sur la page.

from django.http import HttpResponse

def home(request):
    return HttpResponse("Bienvenue sur la page d'accueil de mon site !")

Et puis si on veut plus de personnalisation, on peut utiliser la fonction render qui prend en paramètre une requête, un template et puis en option :

  • un contexte ici c’est un dictionnaire avec les variables qu’on veut
  • et aussi un content_type : text, json etc
  • un status : 200, 404, 500
  • et un paramètre using pour choisir avec quel moteur charger le template.
from django.shortcuts import render

def about(request):
    return render(request, 'about.html', {'nom': 'Mon Site'})

Et finalement, on peut aussi avoir des classes plutôt que des fonctions pour les vues.

from django.views import View
from django.shortcuts import render

class MyView(View):
    def get(self, request):
        return render(request, 'my_template.html', {'data': 'Une variable'})

Les templates (gabarit)

Django est un framework python dit “MVT” pour Modele Vue Template.

On va voir les Templates ou Gabarit qui est la partie qui sert à générer les html en utilisant de la logique et des données récupérées à partir des vues.

Concrètement, c’est un fichier HTML avec un syntaxe spéciale.

On peut afficher des objets python comme des variables avec des doubles accolades {{}}

Ou bien de la logique avec des conditions if ou des boucles for par exemple avec accolade pourcentage {% %}

Et on a aussi accès à plein de filtres filtres qu’on peut appliquer aux objets qu’on affiche avec le symbole pipe |.

Par exemple, si on a un utilisateur alors on peut afficher certains éléments de la page en fonction de s’il est connecté ou pas avec une condition {% if user.is_authenticated %}.

Et puis si c’est le cas on affiche son nom {{ user.name }}.

Et puis on peut aussi ajouter un filtre pour avoir son nom en minuscule en ajoutant pipe lower sur name {{ user.name|lower }}.

Ou bien disons qu’on ait une liste de taches à afficher, on pourrait avoir quelque chose comme ça :

<!-- tasks.html -->
<html>
  <head>
    <title>Liste des Tâches</title>
  </head>
  <body>
    <h1>Ma Liste de Tâches</h1>
    <ul>
      {% for task in tasks %}
      <li>{{ task.name }} - {{ task.due_date|date:"d M, Y" }}</li>
      {% endfor %}
    </ul>
  </body>
</html>

Avec tasks qui est une liste python dans laquelle les éléments ont un nom et une date.

On va donc boucler sur les éléments de la liste et afficher pour chacune le nom de la tache et la date à laquelle on doit faire la tache.

On peut aussi formater la date comme on veut avec un filtre.

Les URLs et le fichier urls.py

Le fichier urls.py permet de relier vos vues avec des chemins d’URL.

C’est dans ce fichier que vous pouvez dire à django quoi faire quand un utilisateur navigue sur une page.

Vous pouvez avoir des urls simples :

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('about/', views.about, name='about'),
    # Ajoutez d'autres chemins ici
]

Mais aussi avoir des chemins d’URL qui prennent des paramètres comme un entier ou une chaîne de caractères.

Si par exemple vous voulez tous les articles de votre blog par langage.

Ou bien tous les articles de votre blog pour une certaine année.

On pourrait avoir :

from django.urls import path
from . import views

urlpatterns = [
    path('langages/<str:langage>/', views.langages, name='langages'),
    path('blog/<int:annee>/', views.blog, name='blog'),
]

On a donc un fichier URL par application dont un fichier URL crée automatiquement par django à la racine de votre projet qui va collecter toutes les URLS de vos différentes applications.

Mais on peut aussi configurer les urls depuis le fichier settings.py.

Car Django permet de faire la meme chose de plusieurs manières et à plusieurs endroits en fonction de vos preferences et du type de projet que vous faire.

💡 Pouvoir faire la même chose à plusieurs endroits est assez fréquent en django. Il n’y a souvent pas de “meilleure” manière de faire, vous pouvez faire ce qui vous semble le mieux organisé en fonction de vos preferences.

Les modèles (Model)

En django on utilise le fichier models.py pour définir la structure de votre base de donnee avec les tables, les colonnes et les champs.

Chaque modèle représente une table dans la base de données.

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')

On définit les modèles sous forme de classe dans lesquels on va définir nos champs, c’est les colonnes de vos tables dans la base de donnee.

On a plusieurs types de champs comme CharField, IntegerField ou encore DateTimeField.

Une fois que vous avez fini la definition de vos modèles, vous devez utiliser la commande

python manage.py makemigrations

… pour dire à django que le schema de votre base de donnee a changé.

C’est d’ailleurs une commande que vous devrez lancer à chaque fois que vous modifiez vos modèles.

Et puis pour appliquer les changements, on utilise la commande migrate avec :

python manage.py migrate

Les différents champs (fields) en django

On a vu comment les modèles fonctionnaient en django, et dedans on a utilisé des champs, donc voyons les différents champs :

Les fields que vous allez le plus utiliser sont :

  • CharField et TextField: pour les textes courts ou long
  • IntegerField et BooleanField: pour les nombres entiers et les booléens
  • EmailField: pour les adresses email
  • URLField: pour les urls
  • SlugField: pour les slugs
  • FileField et ImageField pour les fichiers et les images
  • DateField et DateTimeField: pour les dates et le temps
  • et puis AutoField: pour générer des clés primaires

On a aussi les champs relationnels : ForeignKey, ManyToManyField et OneToOneField

Et vous pouvez aussi créer vos propres champs avec django si les champs de base ne font pas ce que vous voulez.

Dans ces champs, on a plusieurs paramètres :

  • null: Indique si le champ peut être vide ou pas
  • default: pour passer une valeur par défaut au champ
  • primary_key: si le champ est la clé primaire du modèle.
  • help_text: pour ajouter un texte d’aide
  • max_length: pour donner une longueur maximale pour les champs de texte

Ces champs vont devenir les colonnes des tables de vos modèles en base de données et les paramètres que vous leurs passer vont définir leurs règles.

Les migrations

Les migrations dans django c’est ce qui permet de modifier les schemas et le contenu de votre bases de donnee.

On a les commandes :

  • makemigrations pour créer un nouveau fichier de migration pour définir comment votre base de donnée doit changer.
  • Et puis la commande migrate pour appliquer les changement

Disons qu’on veuille ajouter ou modifier un champ à un modèle, on peut faire ça et puis une fois que c’est fait, si on relance le serveur on a une erreur.

On doit faire python manage.py makemigrations puis python manage.py migrate et la ça fonctionne.

Mais maintenant disons qu’on veuille remplir la base de donnée avec des données qu’on à deja.

On peut créer un fichier de migration vide avec makemigrations et le flag --empty et puis créer plein d’objets.

python manage.py makemigrations nom_de_l_application --empty

Dedans, vous pourrez définir des operations que vous voulez appliquer à vos différents modèles.

# Generated by Django 5.0.3 on 2024-04-03 11:42

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
      ...
    ]

    operations = [
      ...
    ]

Les opérations sont des fonctions qui vont être exécutées quand la migration se fait.

Vous pouvez aussi prévoir une operation pour quand la migrate se défait, pour revenir en arrière.

L’avantage d’avoir ces fichiers de migrations c’est qu’on peut revenir en arrière facilement car chaque fichier contient les ajouts.

Vous pouvez voir ça comme un commit avec git.

Le site admin de django

Django vient de base avec un site d’administration super utile dans lequel on va retrouver tous nos modèles et leur contenu.

Pour y acceder vous devez être un utilisateur qui a les droits, vous pouvez créer un super utilisateur avec python manage.py createsuperuser

Et puis rendez-vous sur /admin sur votre site django.

Ce site d’administration est totalement configurable en modifiant le fichier admin.py de vos différentes applications.

Le fichier admin.py

Chaque application que vous créer avec django vient avec ce fichier.

C’est dedans que vous allez ajouter les modèles que vous voulez voir apparaître sur le site d’administration de django en allant sur /admin.

Et vous pouvez aussi configurer tous les champs et les actions possibles dedans.

D’ailleurs la startup dans laquelle j’ai fait mon premier stage en django il y a 10 ans utilisait uniquement ce panneau d’administration pour gérer toutes ses operations.

Donc on peut vraiment en faire tout ce qu’on veut en ajoutant des fonctionnalités et en modifiant celles de bases.

Et vous pouvez faire tout ça depuis le fichier admin pour chacune de vos applications.

Apprendre django avec les livres

Les livres permettent d’apprendre django en suivant de la théorie qui couvre tous les sujets du framework. On retrouvera aussi souvent des projets concrets que vous réaliserez avec le livre. Les bons livres django mêleront donc théorie et pratique.

Si vous voulez apprendre avec les livres, j’ai écrit un classement des meilleurs livres django.

Apprendre django sur YouTube

YouTube est un excellent endroit pour apprendre django gratuitement !

Vous retrouverez d’ailleurs des vidéos django sur ma chaîne YouTube @CommentCoder.

Aller plus loin en django !

Et voilà, vous connaissez maintenant les concepts de base de django.

On a vu comment créer un projet puis on a vu les différents concept de ce framework web en Python.

Quelle application allez-vous créer avec django ?