从python中的URL获取查询字符串的最佳方法?

时间:2012-07-01 09:36:04

标签: python django comparison urlencode urlparse

我需要从此网址https://stackoverflow.com/questions/ask?next=1&value=3获取查询字符串,我不想使用request.META。我已经发现有两种方法可以获取查询字符串:

  1. 使用urlparse urlparse.urlparse(URL).query

  2. 使用网址编码 使用urlencode并将request.GET params字典传递给它以获取字符串表示。

  3. 那么哪种方式更好?我的同事们更喜欢urlencode,但没有提供令人满意的解释。他们声称urlparse在内部调用urlencode,这是我不确定的,因为urlencode存在于urllib模块中。

4 个答案:

答案 0 :(得分:56)

第三种选择:

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

答案 1 :(得分:49)

您可以使用像这样的GET参数创建查询字符串

request.GET.urlencode()

这不包括?前缀,并且它可能不会以与原始请求中相同的顺序返回密钥。

答案 2 :(得分:38)

我更喜欢使用

request.META['QUERY_STRING']

来自docs:

https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpRequest.META

这不包括?前缀。

答案 3 :(得分:1)

你也可以使用request.arg

if 'next' in request.arg and 'values' in request.arg:
    next = request.arg.get('next', '')
    value = request.arg.get('value', '')