33

我需要从此 URL https://stackoverflow.com/questions/ask?next=1&value=3获取查询字符串,并且我不想使用request.META。我发现还有两种获取查询字符串的方法:

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

  2. 使用 url 编码 使用 urlencode 并将 request.GET 参数字典传递给它以获取字符串表示形式。

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

4

3 回答 3

69

您可以使用这样的 GET 参数制作查询字符串

request.GET.urlencode()

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

于 2012-07-01T10:55:10.863 回答
60

第三个选项:

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

urllib.parse 的文档

于 2012-07-01T09:49:58.987 回答
56

我更喜欢使用

request.META['QUERY_STRING']

来自文档:

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

这不包括?前缀。

于 2014-03-09T00:40:03.777 回答