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.
Défi
FacileFais en sorte que la page de commande lise la taille dans l’adresse.
- Dans la vue
order, lissizedepuisrequest.GETafin qu’une taille manquante ne provoque pas d’erreur. - Pour
?size=large, réponds avecYou ordered a large coffee.Insère la taille dans la phrase pour quesmalletmediumfonctionnent aussi. - 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
1Votre premier site Django
Bonjour, DjangoUne deuxième page4Mises en page et fichiers statiques
Héritage des templatesUn titre pour chaque page2URLs dynamiques
Convertisseurs de cheminUne page pour chaque boissonChaînes de requêteLever Http404Entraînez-vous par vous-même : Playground Django