Получение значений параметров URL в Django: методы и подходы

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для извлечения параметров запроса из URL в Python вам поможет модуль urllib.parse с функцией parse_qs:

Python
Скопировать код
from urllib.parse import urlparse, parse_qs

print(parse_qs(urlparse('http://example.com?name=Jane&hobby=reading').query))
# Результат: {'name': ['Jane'], 'hobby': ['reading']}

Разбейте URL на компоненты с помощью функции urlparse, затем обработайте полученный запрос функцией parse_qs. В результате вы получите словарь с параметрами. Вот так просто выглядит работа с URL в Python!

Кинга Идем в IT: пошаговый план для смены профессии

Обработка различных типов параметров

Множественные значения параметра

URL-параметры могут содержать несколько значений. parse_qs грамотно группирует их в один список:

Python
Скопировать код
url = 'http://example.com?tag=python&tag=programming'
parsed_url = urlparse(url)
params = parse_qs(parsed_url.query)

print(params)
# Ответ: {'tag': ['python', 'programming']}

"Булевый" параметр

Булевые параметры в URL обычно не содержат значений, а их присутствие означает true:

Python
Скопировать код
url = 'http://example.com?enabled'
params = parse_qs(urlparse(url).query)
is_enabled = params.get('enabled', [''])[0] == 'true'

Если вам не хватает Python 2

Тем, кто скучает по Python 2, подойдет использование urlparse вместо urllib.parse:

Python
Скопировать код
from urlparse import urlparse, parse_qs

url = 'http://example.com?name=Jane'
print(parse_qs(urlparse(url).query))

Визуализация

Подумайте об извлечении параметров из URL, как о заказе пиццы:

Markdown
Скопировать код
Вам доставили пиццу (🍕): "http://example.com/page?param1=value1&param2=value2"

Вот как мы её нарезаем:

Python
Скопировать код
from urllib.parse import urlparse, parse_qs

query = urlparse("http://example.com/page?param1=value1&param2=value2").query
params = parse_qs(query)

Вы получаете срезанные кусочки, каждый из которых имеет своё значение:

Markdown
Скопировать код
Кусочки пиццы (🍕):
- param1: ["value1"]
- param2: ["value2"]

Осторожно, горячо!

Будьте внимательны, чтобы не потерять ни один из параметров:

Python
Скопировать код
param_value = params.get('param1', [None])[0]

Для поклонников "Furl"

Furl – практичный инструмент, упрощающий работу с URL:

Python
Скопировать код
from furl import furl

url = furl('http://example.com?page=2&sort=price')
page_number = url.args['page']
sort_order = url.args['sort']

print(page_number, sort_order)
# Ответ: ('2', 'price')

Django-путь

Во фреймворке Django получение параметров запроса ещё никогда не было таким простым:

Python
Скопировать код
def view(request):
    search_query = request.GET.get('query', default_value)

Полезные материалы

  1. Python – документация модуля urllib.parse.
  2. Соответствие параметров URL запроса и словаря Python – Stack Overflow.
  3. Requests: HTTP для людей – документация библиотеки Requests.
  4. API – документация Flask.
  5. URL – Веб API | MDN.
  6. Получение данных через GET-запросы с использованием urllib | Обучение Python – YouTube.
  7. Учимся использовать urllib2 в Python – PythonForBeginners.com.