Menu
CoddyTech

Stringhe di query

Fa parte della sezione Fondamenti di Django del percorso Django di Coddy. Lezione 8 di 23.

La pagina dell’ordine indica sempre la taglia media. La taglia scelta dal cliente può essere inclusa nell’indirizzo, dopo un punto interrogativo: /order/?size=large.

Quella parte è la stringa di query: coppie name=value unite da &. Non fa parte del percorso, quindi path("search/", ...) corrisponde anche a /search/?q=cake. La vista legge le coppie da request.GET, che funziona come un dizionario:

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

.get() accetta un valore predefinito se manca un nome; request.GET["q"], invece, causerebbe un errore. Ogni valore viene ricevuto come testo e chiunque può digitare qualsiasi cosa dopo il ?, quindi controlla un valore prima di usarlo. Per accettare solo alcuni valori, confronta il valore con un elenco di quelli consentiti e usa un valore predefinito per tutto il resto.

challenge icon

Sfida

Facile

Fai in modo che la pagina dell’ordine legga la dimensione dall’indirizzo.

  1. Nella vista order, leggi size da request.GET, così una dimensione mancante non causa un errore.
  2. Per ?size=large, rispondi con You ordered a large coffee. Inserisci la dimensione nella frase, così funzionano anche small e medium.
  3. Qualsiasi altra dimensione, o nessuna, ordina una dimensione media.

Apri /order/?size=huge: vedrai You ordered a medium coffee.

Provalo tu

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.")

Tutte le lezioni di Fondamenti di Django

Esercitati da solo: Playground Django