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

NIl*_*rma 29 python django comparison urlencode urlparse

我需要从这个URL获取查询字符串/sf/?next=1&value=3,我不想使用request.META.我已经发现有两种方法可以获取查询字符串:

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

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

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

Jon*_*nts 58

第三种选择:

>>> 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']}
Run Code Online (Sandbox Code Playgroud)

在Python 3+中,这可用作:

from urllib.parse import parse_qs
Run Code Online (Sandbox Code Playgroud)

urllib.parse的文档

  • 好吧,不太确定为什么你想要查询字符串并且没有处理它,但使用urlparse是最易读和易懂的方式. (6认同)

小智 54

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

request.GET.urlencode()
Run Code Online (Sandbox Code Playgroud)

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

  • 重要的是要注意,由于QueryDict包装了无序字典,request.GET.urlencode()可能不会按照它们在原始请求URI中出现的顺序返回密钥. (11认同)