Ответ 1
Вы можете создать строку запроса с использованием параметров GET, таких как
request.GET.urlencode()
Это не включает префикс ?
, и он может не возвращать ключи в том же порядке, что и в исходном запросе.
Мне нужно получить строку запроса с этого URL-адреса https://stackoverflow.com/info/ask?next=1&value=3, и я не хочу использовать request.META. Я понял, что есть еще два способа получить строку запроса:
Использование urlparse urlparse.urlparse(url).query
Использование url encode Используйте urlencode и передайте в него параметр param. request, чтобы получить строковое представление.
Так какой путь лучше? Мои коллеги предпочитают urlencode, но не предоставили удовлетворительного объяснения. Они утверждают, что urlparse вызывает urlencode внутри, что я не уверен в том, что urlencode живет в модуле urllib.
Вы можете создать строку запроса с использованием параметров GET, таких как
request.GET.urlencode()
Это не включает префикс ?
, и он может не возвращать ключи в том же порядке, что и в исходном запросе.
Третий вариант:
>>> from urlparse import urlparse, parse_qs
>>> url = 'http://something.com?blah=1&x=2'
>>> urlparse(url).query
'blah=1&x=2'
>>> parse_qs(urlparse(url).query)
{'blah': ['1'], 'x': ['2']}
В Python 3+ это доступно как:
from urllib.parse import parse_qs
Я предпочитаю использовать
request.META['QUERY_STRING']
Из документов:
https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpRequest.META
Это не включает префикс ?
.
вы также можете использовать request.arg также
if 'next' in request.arg and 'values' in request.arg:
next = request.arg.get('next', '')
value = request.arg.get('value', '')