首页 > 解决方案 > Tornado 端点匹配

问题描述

我一直试图从龙卷风中找到一些关于端点匹配优先级的文档,但我找不到任何东西。我想知道龙卷风进行端点匹配的预期行为是什么。

例子:

def make_app():
    return tornado.web.Application(
            (r"/api/v1/tree/", test1),
            (
                r"/api/v1/?(?P<variable1>[A-Za-z0-9-]+)?/?(?P<variable2>[A-Za-z0-9-]+)?",
                test2,
            ),
            (r"/api/v1/garden/tree/" + r"([^/]+)/", test3)
            ]
     )

特别是我想知道是否会调用第一个和第三个方法,或者第二个调用是否会使其他方法被忽略。

标签: tornado

解决方案


所有规则都按顺序考虑,并使用第一个匹配项。因此,在这种情况下,/api/v1/tree/将始终考虑该规则。这条/api/v1/garden/tree规则可能应该移到第二条规则之上,尽管很难阅读正则表达式来确定那里是否存在真正的冲突。


推荐阅读