Flask似乎不支持带有URI编码组件的路由.如果我做错了,或者我需要包含一个特殊标志,我很好奇.
我的路线看起来像这样:
@app.route('/foo/<encoded>/bar/')
def foo(encoded):
# ...
pass
Run Code Online (Sandbox Code Playgroud)
此匹配的URL可能如下所示:
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
Run Code Online (Sandbox Code Playgroud)
以前的URL工作,后者吐出一个可爱的404.
谢谢!
unm*_*ted 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并且期望使用斜线跟踪的URL,即提交http://ex.com/foo/<path:encoded>/bar并encoded使用双斜杠获取内容的bookmarklet ,Apache会将多个斜杠转换为单个斜杠.