Menu
CoddyTech

Cadenas de consulta

Parte de la sección Conceptos básicos de Django del Journey de Django de Coddy. Lección 8 de 23.

La página del pedido siempre indica «mediano». La talla que elige el cliente puede incluirse en la dirección, después de un signo de interrogación: /order/?size=large.

Esa parte es la cadena de consulta: pares name=value unidos por &. No forma parte de la ruta, así que path("search/", ...) también coincide con /search/?q=cake. La vista lee los pares de request.GET, que funciona como un diccionario:

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

.get() acepta un valor predeterminado para un nombre que falta; request.GET["q"] provocaría un error. Todos los valores llegan como texto, y cualquiera puede escribir cualquier cosa después del ?, así que comprueba un valor antes de usarlo. Para aceptar solo algunos valores, compara el valor con una lista de valores permitidos y usa un valor predeterminado para cualquier otro.

challenge icon

Desafío

Fácil

Haz que la página de pedidos lea el tamaño de la dirección.

  1. En la vista order, lee size de request.GET para que la ausencia de un tamaño no provoque un error.
  2. Para ?size=large, responde con You ordered a large coffee. Incluye el tamaño en la oración para que también funcionen small y medium.
  3. Si el tamaño es cualquier otro o no se especifica ninguno, se pide uno mediano.

Abre /order/?size=huge: verás Has pedido un café mediano.

Pruébalo tú mismo

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

Todas las lecciones de Conceptos básicos de Django

Practica por tu cuenta: Playground de Django