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

2024-05-23 21:38:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下网址:

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

当我使用烧瓶法时:

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

它只返回字符串“newhaven CT”,实际上是将%20&;+都转换为空白

我想将参数“newhaven”和“CT”分别作为列表中的两个条目从我的URL中读取。我怎么做的?在


Tags: 字符串httpsiosearchget烧瓶requestusername
1条回答
网友
1楼 · 发布于 2024-05-23 21:38:47

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

urllib.parse.unquote函数不将+解析为空间,urllib.parse.unquote_plus则执行此操作。See the docs。在

例如:

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

有一个简单的方法,如果你能让url像q=New%20Haven&q=CT,Flask就可以把q解析成多个值。在

^{pr2}$

或者使用urllib.parse.parse_qs自己解析它。在

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

相关问题 更多 >