Projet, applications et première vue

Première leçon du cours Django fondamentaux, en accès libre : environ 18 minutes, 3 exercices et 3 questions de quiz. C'est la leçon de base du catalogue ; dans l'espace étudiant, elle est réécrite pour ton profil.

Objectifs

  • Créer un projet Django et une application, et comprendre leur rôle respectif
  • Écrire une vue fonction et la relier à une URL avec path() et include()
  • Comprendre le cycle requête → URL → vue → réponse et l'architecture MTV

Projet et applicationsRoutage des URLVues

Django en bref

Django est un framework web Python « batteries incluses » : ORM pour la base de données, système de gabarits, formulaires, authentification, interface d’administration, protections de sécurité… Il est utilisé pour des sites de contenu, des back-offices, des SaaS et des API. Ce cours utilise Django 6.1 (qui demande Python 3.12 ou plus récent) ; les notions présentées sont les mêmes dans la version à support long terme 5.2 LTS.

Créer un projet

python -m venv .venv && source .venv/bin/activate
python -m pip install Django            # dernière version stable (6.1)
django-admin startproject config .     # le point : crée le projet dans le dossier courant
python manage.py runserver              # http://127.0.0.1:8000

Arborescence obtenue :

manage.py            outil de commande du projet
config/
    settings.py      configuration (applications, base de données, langue...)
    urls.py          table des URL principale
    wsgi.py, asgi.py points d'entrée pour les serveurs de production

Dans settings.py, passe LANGUAGE_CODE = "fr-fr" et TIME_ZONE = "Europe/Paris".

Créer une application

Un projet est un site ; une application est un module qui gère une fonctionnalité (catalogue, blog, comptes). Un projet en contient plusieurs.

python manage.py startapp catalogue

Puis déclare-la dans config/settings.py :

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    # ... applications fournies par Django ...
    "catalogue",            # notre application
]

Première vue

Une vue est une fonction qui reçoit une requête (HttpRequest) et renvoie une réponse (HttpResponse).

# catalogue/views.py
from django.http import HttpResponse


def accueil(request):
    return HttpResponse("<h1>Bienvenue dans le catalogue</h1>")


def detail_produit(request, pk):        # pk vient de l'URL, déjà converti en int
    return HttpResponse(f"Produit n°{pk}")

Relier des URL aux vues

# catalogue/urls.py (fichier à créer)
from django.urls import path
from . import views

app_name = "catalogue"                   # espace de noms des URL de l'application
urlpatterns = [
    path("", views.accueil, name="accueil"),
    path("produits/<int:pk>/", views.detail_produit, name="detail"),
]
# config/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("admin/", admin.site.urls),
    path("catalogue/", include("catalogue.urls")),   # délègue tout ce qui commence par catalogue/
]

<int:pk> est un convertisseur : il n’accepte que des chiffres et passe un int à la vue. Les autres : str (par défaut, tout sauf /), slug (lettres, chiffres, tirets, soulignés), uuid, path (accepte aussi les /). /catalogue/produits/abc/ ne correspond à aucun motif : Django renvoie 404.

Le paramètre name permet de générer les URL sans les écrire en dur : reverse("catalogue:detail", args=[3]) donne /catalogue/produits/3/.

Le parcours d’une requête

  1. Le navigateur demande /catalogue/produits/3/.
  2. Django parcourt config/urls.py dans l’ordre, trouve catalogue/, puis continue dans catalogue/urls.py avec produits/3/.
  3. Le premier motif qui correspond gagne : Django appelle detail_produit(request, pk=3).
  4. La vue renvoie un HttpResponse (souvent construit à partir d’un modèle et d’un gabarit).

C’est l’architecture MTV : le Modèle gère les données, le Template la présentation, la Vue la logique. L’aiguillage des URL est assuré par le framework.

À retenir

  • startproject une fois, startapp par fonctionnalité, sans oublier INSTALLED_APPS.
  • Vue = fonction request → HttpResponse.
  • path() + convertisseurs + name, et include() pour chaque application.

Exercices

Les solutions et les tests restent sur le serveur. Dans l'espace étudiant, ton code est exécuté et corrigé, et le tuteur donne des indices avant la solution.

  1. CodeDifficulté 3Python dans le navigateur2 indices

    Résoudre une URL comme Django

    Implémente le cœur du routage :

    • compiler(route) transforme une route comme "produits/<int:pk>/" en (regex compilée, conversions) en gérant <int:x>, <slug:x>, <str:x>, <path:x> et <x> (équivalent de str) ;
    • resoudre(urlpatterns, chemin) reçoit une liste de (route, nom) et un chemin comme "/produits/3/", retire le / initial, teste les motifs dans l’ordre et renvoie (nom, kwargs) avec les valeurs converties, ou None (404).

    Motifs : int [0-9]+, slug [-a-zA-Z0-9_]+, str [^/]+, path .+.

    import re
    
    CONVERTISSEURS = {
        "int": (r"[0-9]+", int),
        "slug": (r"[-a-zA-Z0-9_]+", str),
        "str": (r"[^/]+", str),
        "path": (r".+", str),
    }
    
    
    def compiler(route):
        ...
    
    
    def resoudre(urlpatterns, chemin):
        ...
  2. TâcheDifficulté 12 indices

    Créer le projet et l'application catalogue

    Dans ton environnement de travail : crée un venv, installe Django (python -m pip install Django), lance django-admin startproject config ., puis python manage.py startapp catalogue. Ajoute l’application à INSTALLED_APPS, crée catalogue/urls.py avec les vues accueil et detail_produit, inclus-le sous catalogue/ dans config/urls.py et lance python manage.py runserver.

    • /catalogue/ affiche le message d'accueil
    • /catalogue/produits/7/ affiche « Produit n°7 »
    • /catalogue/produits/abc/ renvoie une page 404
    • LANGUAGE_CODE vaut fr-fr et la page d'erreur de développement est en français
  3. QCMDifficulté 11 indice

    Projet ou application ?

    Après python manage.py startapp blog, que faut-il faire pour que Django prenne en compte les modèles de blog ?

    • Rien, c'est automatique
    • Ajouter "blog" à INSTALLED_APPS
    • Relancer startproject
    • Créer un fichier blog.py à la racine

Quiz de fin de leçon

  1. Que reçoit et que renvoie une vue Django ?

    • Un dict et une chaîne
    • Un HttpRequest et un HttpResponse
    • Une URL et un modèle
  2. Que fait include(“catalogue.urls”) ?

    • Copie les vues
    • Délègue la suite de l'URL à l'URLconf de l'application
    • Crée l'application
  3. Quel convertisseur accepte « mon-article-2026 » mais pas « a/b » ?

    • int
    • slug
    • path

La suite du cours

  1. Modèles et migrations18 min
  2. Interroger les données avec l'ORM18 min
  3. Vues et gabarits (templates)20 min
  4. Formulaires et interface d'administration20 min

Django fondamentaux · Intermédiaire · 3 h 34