Flask是否有办法接受完整的URL作为URL参数?
我知道<path:something>
接受带有斜线的路径。但是我需要接受一切,包括?
之后的查询字符串,而path
不会捕获它。
http://example.com/someurl.com?andother?yetanother
我想捕捉someurl.com?andother?yetanother
。我提前不知道将提供什么查询args(如果有的话)。我想避免从request.args
重建查询字符串。
path
模式将允许您捕获更复杂的路由模式,如URL:
@app.route('/catch/<path:foo>')
def catch(foo):
print(foo)
return foo
通过?
的数据表明它是一个查询参数,因此它们不会包含在该模式中。您可以从request.query_string
访问该部分,也可以在评论中提到的request.args
中备份它。
由于路由的工作方式,您将无法捕获查询字符串作为路径的一部分。在规则中使用<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
。