Перейти к основному содержимому

Один обработчик на маршрут

Маршрутизация решает, какой код отвечает на какой запрос. В стандартном http.server нет встроенного маршрутизатора — и для обычных случаев он не нужен: do_GET смотрит на self.path и выбирает нужную ветку.

Параметр пути — это часть URL, которая является данными: в /users/7 это 7. Если разбить путь на сегменты, вы получите его: "/users/7".strip("/").split("/") даёт ['users', '7']. Фреймворки добавляют поверх этого маршрутизаторы по шаблонам, но внутри они делают именно это.


Маршруты и значения пути

Два маршрута: список по адресу /users и один пользователь по адресу /users/7. Сегмент с id — это параметр пути, часть URL, которая несёт данные.

Маршрут с параметром пути

Один и тот же do_GET отправляет /users в одну ветку, а /users/7 — в другую: одно разбиение, и второй сегмент даёт 7.

Prompt
Напишите программу на Python, в которой do_GET разбивает путь URL на сегменты, чтобы направить GET /users на строку со списком, а GET /users/7 — на строку об одном пользователе, где сегмент id используется как параметр пути. Запустите сервер на свободном порту, запросите оба пути и выведите ответы.
Вывод: полная программа на Python

Параметры запроса

Часть после ? содержит параметры запроса — настройки запроса, например текст поиска или лимит: /search?q=python&limit=2. urlparse отделяет их от пути, а parse_qs превращает их в словарь списков — значения всегда строки, а .get обрабатывает отсутствующие.

Простое правило: путь говорит, какой ресурс, а запрос — как: фильтры, сортировка, постраничный вывод.

Чтение строки запроса

Обработчик читает q и limit из строки запроса. Во втором запросе limit отсутствует, поэтому обработчик использует значение по умолчанию — отсутствующие параметры — это нормально, учитывайте их заранее.

Prompt
Напишите программу на Python с обработчиком /search, который читает параметры запроса q и limit с помощью urlparse и parse_qs и использует limit по умолчанию, если он отсутствует. Запустите сервер на свободном порту, отправьте запрос один раз с обоими параметрами и один раз только с q и выведите ответы.
Вывод: полная программа на Python