使用查询字符串捕获URL作为Flask路径中的参数

问题描述 投票:1回答:2

Flask是否有办法接受完整的URL作为URL参数?

我知道<path:something>接受带有斜线的路径。但是我需要接受一切,包括?之后的查询字符串,而path不会捕获它。

http://example.com/someurl.com?andother?yetanother

我想捕捉someurl.com?andother?yetanother。我提前不知道将提供什么查询args(如果有的话)。我想避免从request.args重建查询字符串。

python flask
2个回答
2
投票

path模式将允许您捕获更复杂的路由模式,如URL:

@app.route('/catch/<path:foo>')
def catch(foo):
    print(foo)
    return foo

通过?的数据表明它是一个查询参数,因此它们不会包含在该模式中。您可以从request.query_string访问该部分,也可以在评论中提到的request.args中备份它。


1
投票

由于路由的工作方式,您将无法捕获查询字符串作为路径的一部分。在规则中使用<path:path>来捕获任意路径。然后访问request.url以获取访问的完整URL,包括查询字符串。即使没有查询字符串,request.url也总是包含?。这是有效的,但是如果你不想要它,你可以将其剥离。

@app.route("/<path:path>")
def index(path=None):
    return request.url.rstrip("?")

例如,访问http://127.0.0.1:5000/hello?world将返回http://127.0.0.1:5000/hello?world

© www.soinside.com 2019 - 2024. All rights reserved.