【发布时间】:2015-03-03 00:21:52
【问题描述】:
在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”作为其装饰器,从而将传入请求分派给该函数?
【问题讨论】:
-
你似乎不知道装饰器是如何工作的。 “框架如何知道函数“hello”使用“app.route”作为它的装饰器”——仅仅因为装饰器是用函数作为参数调用的,因此它可以存储、访问它,甚至修改它,等等。我建议在询问任何其他与装饰器相关的问题之前阅读官方装饰器教程。
-
也许我的例子或我的陈述不是很好,但我的观点是框架如何找到那些使用特定装饰器安装的功能。
-
一开始我以为python装饰器有什么奇怪的功能可以从装饰器中找到“已安装的功能”。但是通过@vaultah 的解决方案,我看到它只是使用某种方式来解析所有函数签名以找到它们。
-
好吧,正如我所说,阅读装饰器教程应该可以消除这种困惑。此外,对于大多数 python 库(阅读:除了用 C 编写的库之外的所有库),您只需浏览源代码并准确了解它们在做什么。不,它不会“解析函数签名”,它只是存储对实际函数的引用,因为 python 中的函数只是另一个对象。
-
所以@l4mpi 你的意思是处理安装路由的代码不在yieldroutes中?
标签: python url-routing wsgi bottle