给定如下的URL,如何解析查询参数的值?例如,在本例中,我想要some_key的值。
/some_path?some_key=some_value'
我在我的环境中使用Django;请求对象上是否有可以帮助我的方法?
我尝试使用self.request.get('some_key'),但它没有返回值some_value,因为我希望。
给定如下的URL,如何解析查询参数的值?例如,在本例中,我想要some_key的值。
/some_path?some_key=some_value'
我在我的环境中使用Django;请求对象上是否有可以帮助我的方法?
我尝试使用self.request.get('some_key'),但它没有返回值some_value,因为我希望。
当前回答
有一个很好的库w3lib.url
from w3lib.url import url_query_parameter
url = "/abc?def=ghi"
print url_query_parameter(url, 'def')
ghi
其他回答
urlparse模块提供了你需要的一切:
urlparse.parse_qs ()
def getParams(url):
params = url.split("?")[1]
params = params.split('=')
pairs = zip(params[0::2], params[1::2])
answer = dict((k,v) for k,v in pairs)
希望这能有所帮助
我很惊讶这个答案还没出现在这里。使用:
request.GET.get('variable_name')
这将从“get”字典中“获取”变量,如果它存在则返回“variable_name”值,如果不存在则返回None对象。
这里的大多数答案建议使用parse_qs来解析URL字符串。这个方法总是以列表的形式返回值(而不是直接以字符串的形式),因为一个参数可以出现多次,例如:
http://example.com/?foo=bar&foo=baz&bar=baz
将返回:
{'foo': ['bar', 'baz'], 'bar': ['baz']}
这有点不方便,因为在大多数情况下,您要处理的URL没有多次具有相同的参数。该函数默认返回第一个值,如果有多个元素,则只返回一个列表。
from urllib import parse
def parse_urlargs(url):
query = parse.parse_qs(parse.urlparse(url).query)
return {k:v[0] if v and len(v) == 1 else v for k,v in query.items()}
例如,http://example.com/?foo=bar&foo=baz&bar=baz将返回:
{'foo': ['bar', 'baz'], 'bar': 'baz'}
没有使用Django,尝试使用Python 3.9。它也可以在处理程序中使用下面的代码片段来检索:
考虑URL为-
http://localhost:8081/api/v1/users?query_key=abcdef12345
和handler方法为:
@routes.get('/api/v1/users')
async def handler_users(request):
query_key = request.url.query['query_key']