python瓶架如何通过装饰器安装路由处理程序?

时间:2015-01-05 12:52:35

标签: python url-routing wsgi bottle

在python bottle框架下安装路由处理程序的示例如下:

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”作为其装饰器,从而将传入的请求分派给该函数?

1 个答案:

答案 0 :(得分:2)

只要你向route装饰者提供路径(或多个路径),函数的名称就不代表任何东西,

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

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

如果您不提供route的单一路径,则功能名称开始发挥作用。然后,Bottle会从函数的签名生成可能的路径(请参阅source 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)