如何在 Python 中使用 Flask 从 URL 分别读取带有 %20 和 + 的参数?



我有以下网址:

https://ide50-username.cs50.io/search?q=New%20Haven+CT

当我使用烧瓶方法时:

q = request.args.get("q")

它只是向我返回字符串"纽黑文CT",本质上将%20+转换为空格

我想从我的URL中分别读取参数"New Haven"和"CT"作为列表中的两个项目。 我该怎么做?

如果你真的想用+分隔参数.您可以自行解析 URL。(警告:它不像urllib.parse.parse_qs那样安全。

urllib.parse.unquote函数不会+解析到空间,urllib.parse.unquote_plus会这样做。请参阅文档。

举个例子:

from urllib.parse import unquote

def parse_query_string(query_string):
pairs = [s2 for s1 in query_string.split('&') for s2 in s1.split(';')]
parse_result = {}
for pair in pairs:
name_value = pair.split('=', 1)
if len(name_value) != 2:
continue
if len(name_value[1]):
name = unquote(name_value[0])
_value = unquote(name_value[1])
# separate value with +
values = _value.split('+')
if name in parse_result:
parse_result[name].extend(values)
else:
parse_result[name] = values
return parse_result

@app.route('/search')
def search():
# Get raw query_string
raw_query_string = request.query_string.decode()
queries = parse_query_string(raw_query_string)
q = queries.get('q')
return ''

还有一个简单的方法,如果你能让网址像q=New%20Haven&q=CT一样,Flask可以解析q为多个值。

print(request.args)
# output: ImmutableMultiDict([('q', 'New Haven'), ('q', 'CT')])

或者使用urllib.parse.parse_qs自行解析。

raw_query_string = request.query_string.decode()
print(parse_qs(raw_query_string))
# output: {'q': ['New Haven', 'CT']}

相关内容

  • 没有找到相关文章

最新更新