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 le 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 dans 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.Défi
FacileFais en sorte que /order/ lise la taille dans la chaîne de requête :
?size=largeindiqueYou ordered a large coffee., et il en va de même poursmalletmedium;- si aucune taille n’est indiquée, ou si le café n’en vend pas une comme
huge, la commande porte sur un café moyen.
Appuie sur Run : l’aperçu ouvre /order/?size=large.
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