使用带有前导斜线的路径的Flask路线

时间:2014-06-02 18:11:12

标签: python flask routes

我正在尝试使用带路径转换器的简单路径来获取Flask:

@api.route('/records/<hostname>/<metric>/<path:context>') 

除非&#34;路径&#34; URL的一部分使用前导斜杠。在这种情况下,我得到一个404.我理解错误,但我没有得到的是文档中没有解决方法或互联网上有关如何解决此问题的任何方法。我觉得我是第一个尝试做这个基本事情的人。

有没有办法让这个有意义的URL工作?例如这种请求:

http://localhost:5000/api/records/localhost/disks.free//dev/disk0s2 

1 个答案:

答案 0 :(得分:12)

PathConverter URL converter明确地不包括前导斜杠;这是故意的,因为大多数路径应该包含这样的斜杠。

请参阅PathConverter source code

regex = '[^/].*?'

此表达式与任何内容匹配,只要它不以/ 开头。

您无法对路径进行编码;尝试在路径中创建不是URL分隔符的斜杠,但通过URL将其编码为%2F的部分值并不会飞得最多,如果不是所有服务器在传递之前解码URL路径WSGI服务器。

您必须使用其他转换器:

from werkzeug.routing import PathConverter

class EverythingConverter(PathConverter):
    regex = '.*?'

app.url_map.converters['everything'] = EverythingConverter

@api.route('/records/<hostname>/<metric>/<everything:context>') 

注册转换器必须在Flask app对象上完成,而不能在蓝图上完成。