似乎Flask不支持带有URI编码组件的路由。我很好奇,如果我做错了,或者我需要包含一个特殊标志。
我的路线看起来像这样:
@app.route('/foo/<encoded>/bar/')
def foo(encoded):
# ...
pass
此匹配的网址可能如下所示:
http://foobar.com/foo/xxx/bar/ # matched correctly, no URI component
http://foobar.com/foo/x%2Fx%2Fx%2F/bar/ # not matched correctly, URI component
以前的URL工作,后者吐出一个可爱的404。
谢谢!
答案 0 :(得分:26)
将path
添加到您的网址规则:
@app.route('/foo/<path:encoded>/bar/')
每条评论更新:路线API文档位于:http://flask.pocoo.org/docs/api/#flask.Flask.route。实现path
样式路由转换器的基础类在这里:http://werkzeug.pocoo.org/docs/routing/#custom-converters(这是pocoostan非常好的部分之一。)对于尾部斜杠,有一些特殊规则相当于:
如果规则以斜杠结尾,并且请求没有斜杠 用户,用户自动重定向到同一页面 尾随斜杠。
如果规则没有以尾部斜杠结尾,并且用户请求 带有斜杠的页面,未找到404。
另请注意,如果您使用的是Apache并且期望使用斜线跟踪的网址,即提交到http://ex.com/foo/<path:encoded>/bar
且encoded
的小书签获取带有双斜线的内容,Apache将转换多个斜杠一个人。