2012-07-01 2 views
19

У меня этот url = https://stackoverflow.com/questions/ask?next=1&value=3 Теперь мне нужно получить строку запроса из этого URL-адреса. Я не хочу использовать request.META для получения строки запроса. Как когда я понял это, что есть еще два способа, чтобы получить строку запросаЛучший способ получить строку запроса из URL-адреса в python?

  1. Использование urlparse Используйте urlparse.urlparse (URL) .query Dats его

  2. Использование URL-адресов закодировать Использование UrlEncode и передать request.GET Params словаря в него, чтобы получить строковое представление этого ....

Итак, какой путь лучше получить строку запроса ...? Некоторые из моих коллег говорят, что urlencode намного лучше, однако я не доволен там, где есть ответы. Например, они упомянули, что urlparse также вызывает urlencode. Даже в этом случае у меня есть сомнения, поскольку я считаю, что urlparse и urlencode полностью independent.as urlencode в модуле urllib .... пожалуйста уточните это.

ответ

38

Вы можете сделать строку запроса с использованием параметров GET, как этот

request.GET.urlencode() 

Это не включает префикс ?, и он может не возвращать ключи в том же порядке, что и в исходном запросе.

+7

Важно отметить, что поскольку QueryDict обертывает неупорядоченный словарь, request.GET.urlencode() не может возвращать ключи в том же порядке, что они появляются в исходном URI запроса. – Aaron

+1

Это основа словарей. Кроме того, большинство строк запроса следует считать неупорядоченными, если они введены в ключ. Если это истинный список, он будет заказан. – uchuugaka

50

Третий вариант:

>>> 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 

Documentation for urllib.parse

+6

Хорошо, не совсем понятно, почему вы хотите строку запроса и не обрабатывали ее, но использование urlparse является наиболее читаемым и понятным способом. –

+0

Это действительно помогло мне - мне нужна карта (или какой-то объект), в которой содержались параметры из URL-адреса запроса! –

Смежные вопросы