Получение значений параметров URL в Django: методы и подходы
Быстрый ответ
Для извлечения параметров запроса из URL в Python вам поможет модуль urllib.parse
с функцией parse_qs
:
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!
Обработка различных типов параметров
Множественные значения параметра
URL-параметры могут содержать несколько значений. parse_qs
грамотно группирует их в один список:
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
:
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
:
from urlparse import urlparse, parse_qs
url = 'http://example.com?name=Jane'
print(parse_qs(urlparse(url).query))
Визуализация
Подумайте об извлечении параметров из URL, как о заказе пиццы:
Вам доставили пиццу (🍕): "http://example.com/page?param1=value1¶m2=value2"
Вот как мы её нарезаем:
from urllib.parse import urlparse, parse_qs
query = urlparse("http://example.com/page?param1=value1¶m2=value2").query
params = parse_qs(query)
Вы получаете срезанные кусочки, каждый из которых имеет своё значение:
Кусочки пиццы (🍕):
- param1: ["value1"]
- param2: ["value2"]
Осторожно, горячо!
Будьте внимательны, чтобы не потерять ни один из параметров:
param_value = params.get('param1', [None])[0]
Для поклонников "Furl"
Furl
– практичный инструмент, упрощающий работу с URL:
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 получение параметров запроса ещё никогда не было таким простым:
def view(request):
search_query = request.GET.get('query', default_value)
Полезные материалы
- Python – документация модуля urllib.parse.
- Соответствие параметров URL запроса и словаря Python – Stack Overflow.
- Requests: HTTP для людей – документация библиотеки Requests.
- API – документация Flask.
- URL – Веб API | MDN.
- Получение данных через GET-запросы с использованием urllib | Обучение Python – YouTube.
- Учимся использовать urllib2 в Python – PythonForBeginners.com.