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

时间:2015-09-28 04:15:38

标签: python flask

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

我知道<path:something>接受带斜杠的路径。但是,我需要接受包括?之后的查询字符串在内的所有内容,而path无法捕获该内容。

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

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

2 个答案:

答案 0 :(得分:2)

path模式可以让您捕获更复杂的路由模式,例如URL:

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

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

答案 1 :(得分: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