该PathConverter
URL转换明确不包括前导斜杠; 因为大部分的路径应该这是故意 不 包括这样的斜线。
regex = '[^/].*?'
该表达式匹配任何 不以开头的内容/
。
您无法编码路径;%2F
如果不是所有服务器都在将URL路径传递给WSGI服务器之前对其进行解码,则尝试通过将URL编码为URL而不是URL分隔符而不是一部分值来在路径中进行斜杠的转换最多。
您必须使用其他转换器:
import werkzeug
from werkzeug.routing import PathConverter
from packaging import version
# whether or not merge_slashes is available and true
MERGES_SLASHES = version.parse(werkzeug.__version__) >= version.parse("1.0.0")
class EverythingConverter(PathConverter):
regex = '.*?'
app.url_map.converters['everything'] = EverythingConverter
config = {"merge_slashes": False} if MERGES_SLASHES else {}
@api.route('/records/<hostname>/<metric>/<everything:context>', **config)
注意该merge_slashes
选项;如果您安装了Werkzeug 1.0.0或更高版本,并将其保留为默认设置,则多个连续/
字符将合为一个。
注册转换器必须在Flaskapp
对象上完成,而不能在蓝图上完成。