带有URI编码组件的Flask路由

时间:2011-08-17 23:03:00

标签: python flask

似乎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。

谢谢!

1 个答案:

答案 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>/barencoded的小书签获取带有双斜线的内容,Apache将转换多个斜杠一个人。