Menu
CoddyTech

Chaînes de requête

Fait partie de la section Les bases de Django du Journey Django de Coddy. Leçon 8 sur 23.

La page de commande indique toujours « moyen ». La taille choisie par un client peut être transmise dans l’adresse, après un point d’interrogation : /order/?size=large.

Cette partie est la chaîne de requête : des paires name=value reliées par &. Elle ne fait pas partie de la route, donc path("search/", ...) correspond aussi à /search/?q=cake. La vue lit les paires depuis request.GET, qui fonctionne comme un dictionnaire :

def search(request):
    word = request.GET.get("q", "")
    if len(word) > 30:
        word = word[:30]
    return HttpResponse(f"Results for {word}")

.get() prend une valeur par défaut si un nom est absent ; request.GET["q"] provoquerait plutôt une erreur. Chaque valeur est reçue sous forme de texte, et n’importe qui peut saisir n’importe quoi après le ? : vérifie donc une valeur avant de l’utiliser. Pour n’accepter que certaines valeurs, compare la valeur à une liste de valeurs autorisées et utilise une valeur par défaut pour toute autre valeur.

challenge icon

Défi

Facile

Fais en sorte que la page de commande lise la taille dans l’adresse.

  1. Dans la vue order, lis size depuis request.GET afin qu’une taille manquante ne provoque pas d’erreur.
  2. Pour ?size=large, réponds avec You ordered a large coffee. Insère la taille dans la phrase pour que small et medium fonctionnent aussi.
  3. Toute autre taille, ou l’absence de taille, commande un café moyen.

Ouvre /order/?size=huge : tu vois You ordered a medium coffee.

Essayez vous-même

from django.http import HttpResponse

DRINKS = {
    "espresso": {"name": "Espresso", "price": 2.5, "description": "A short, strong shot of coffee."},
    "latte": {"name": "Latte", "price": 3.5, "description": "Espresso with lots of steamed milk."},
    "flat-white": {"name": "Flat White", "price": 3.75, "description": "Espresso with a thin layer of silky milk."},
    "hot-chocolate": {"name": "Hot Chocolate", "price": 3, "description": "Dark chocolate melted into warm milk."},
}


def home(request):
    return HttpResponse("<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>")


def about(request):
    return HttpResponse("Corner Café opened in 2026.")


def hours(request):
    return HttpResponse("Open every day from 8:00 to 18:00.")


def contact(request):
    return HttpResponse("Write to us at hello@cornercafe.example.")


def table(request, number):
    return HttpResponse(f"<h1>Table {number}</h1>")


def drink(request, slug):
    item = DRINKS[slug]
    return HttpResponse(f"<h1>{item['name']}</h1><p>{item['description']}</p>")


def order(request):
    size = "medium"
    return HttpResponse(f"You ordered a {size} coffee.")

Toutes les leçons de Les bases de Django

Entraînez-vous par vous-même : Playground Django