Flask是否有办法接受完整的网址作为网址参数?
我知道<path:something>
接受带斜杠的路径。但是,我需要接受包括?
之后的查询字符串在内的所有内容,而path
无法捕获该内容。
http://example.com/someurl.com?andother?yetanother
我想捕获someurl.com?andother?yetanother
。我提前不知道将提供什么查询args(如果有的话)。我想避免从request.args
重建查询字符串。
答案 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
。