BottlePy - 如何在钩子中找到当前路由?

3 投票
2 回答
1198 浏览
提问于 2025-04-17 13:30

我在BottlePy里有一个钩子:

@bottle_app.hook('before_request')
def update_session():
    # do stuff
    return

还有一些路由:

@bottle_app.route('/')
def index():
    return render('index')

@bottle_app.route('/example')
def example():
    return render('example')

update_session()这个函数里,我怎么知道当前调用的是哪个路由呢?

我查阅了文档,但没有找到答案,这个应该是可以做到的吧?

2 个回答

1
from bottle import request

@bottle_app.hook('before_request')
def update_session():
    print request.path
    return
my_routes = {"/":lambda: 5}
event = my_routes.get(request.path, lambda: None)
print event()

应该可以满足你所要求的。

然后你可以把路径存储在一个字典里。

7

这个请求同时有一个 bottle.route 和一个 route.handle 的条目,它们的值是一样的:

from bottle import request

print request['bottle.route']

这个情况没有文档说明;我得去 查看 bottle.py 的源代码 才发现。这个值是一个 Route 实例;它有 .name.rule 这两个属性,你可以查看这两个属性来确定哪个路由被匹配上了。

if request['bottle.route'].rule == '/':
    # matched the `/` route.

对于你具体的例子来说,这可能有点过于复杂,因为你只是匹配简单的路径,但如果是更复杂的规则,比如使用正则表达式的规则,这种方法会比直接匹配 request.path 属性要好(不过给你的路由设置一个 name 值是个好主意)。

撰写回答