python bottle framework如何通过decorator安装routing handler?

How does python bottle framework install routing handler through decorator?

在python bottle框架下安装routing handler的例子如下:

from bottle import Bottle, run
app = Bottle()

@app.route('/hello')
def hello():
    return "Hello World!"

run(app, host='localhost', port=8080)

以上代码会将 "localhost:8080/hello" 路由到显示 "Hello World!" 的页面(由函数 hello 处理)。 我想知道这个安装过程是如何完成的? 框架如何知道函数 "hello" 使用 "app.route" 作为装饰器,从而将传入请求分派给该函数?

函数名称对 Bottle 没有任何意义,只要您提供 route 装饰器的路径即可。

Route 构造函数的参数包括 callbackrule,其中 callback 是您的函数,rule 是路径字符串。

如果提供了一条或多条路径,Bottle 将简单地为每条路径创建一个 Route 实例。

函数名称 只有 起作用,如果您不提供到 route 的单一路径。然后 Bottle 将从一个函数的签名中生成可能的路径(参见 source for yieldroutes)并为每个路径创建一个 Route 实例。

来自Bottle.route's source的相关部分:

for rule in makelist(path) or yieldroutes(callback):
    for verb in makelist(method):
        verb = verb.upper()
        route = Route(self, rule, verb, callback, name=name,
                      plugins=plugins, skiplist=skiplist, **config)
        self.add_route(route)