Menu
CoddyTech

Строки запроса

Часть раздела Основы Django путешествия по Django на Coddy. Урок 8 из 23.

На странице заказа всегда указан средний размер. Выбранный покупателем размер можно передать в адресе после вопросительного знака: /order/?size=large.

Эта часть называется строкой запроса: пары name=value, соединённые с помощью &. Она не является частью маршрута, поэтому path("search/", ...) также соответствует /search/?q=cake. Представление считывает пары из request.GET, который работает как словарь:

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

.get() принимает значение по умолчанию, если имя отсутствует; request.GET["q"] вместо этого вызовет ошибку. Каждое значение поступает в виде текста, и кто угодно может ввести что угодно после ?, поэтому проверяй значение перед использованием. Чтобы принимать только некоторые значения, сравнивай значение со списком разрешённых и используй значение по умолчанию для всех остальных.

challenge icon

Задание

Легко

Сделай так, чтобы страница заказа считывала размер из адреса.

  1. Во представлении order считай size из request.GET, чтобы отсутствие размера не приводило к сбою.
  2. Для ?size=large выведи You ordered a large coffee. Вставь размер в предложение, чтобы также работали small и medium.
  3. При любом другом размере или если размер не указан, заказывай средний.

Открой /order/?size=huge: ты увидишь You ordered a medium coffee.

Попробуйте сами

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

Все уроки раздела Основы Django

Потренируйтесь самостоятельно: Песочница Django