我通常使用method version来处理瓶子中的路由
bottle.route("/charge", "GET", self.charge)
瓶子文档严重依赖@route
装饰器来处理路由,我有一个案例我不知道如何转换成我最喜欢的版本。 serving static files上的文档使用示例
from bottle import static_file
@route('/static/<filename:path>')
def send_static(filename):
return static_file(filename, root='/path/to/static/files')
有没有办法把它变成某种
bottle.route("/static", "GET", static_file)
施工?特别是我对如何将filename
和root
参数传递给static_file
感到困惑。
答案 0 :(得分:2)
接受的答案并不能很好地解决你的问题,所以我会加入进来。你似乎试图使用Bottle的static_file
作为路线目标,但是&#&# 39;不应该以那种方式使用。正如您引用的示例所示,static_file
意味着从在路径目标函数中调用。这是一个完整的工作示例:
import bottle
class AAA(object):
def __init__(self, static_file_root):
self.static_file_root = static_file_root
def assign_routes(self):
bottle.route('/aaa', 'GET', self.aaa)
bottle.route('/static/<filename:path>', 'GET', self.send_static)
def aaa(self):
return ['this is aaa\n']
def send_static(self, filename):
return bottle.static_file(filename, self.static_file_root)
aaa = AAA('/tmp')
aaa.assign_routes()
bottle.run(host='0.0.0.0', port=8080)
使用示例:
% echo "this is foo" > /tmp/foo
% curl http://localhost:8080/static/foo
this is foo
希望这有帮助。
答案 1 :(得分:1)
因为你想使用单一方法,你必须自己将参数传递给static_file
,并使用re
来解析它们。
代码如下所示:
from bottle import Router
app.route('/static/:filename#.*#', "GET", static_file(list(Router()._itertokens('/static/:filename#.*#'))[1][2], root='./static/'))
这有点长,如果你想解析外面的参数,那么你可以添加另一个解析函数。
我知道你想要使你的所有路由器看起来干净整洁,但装饰器要丰富功能但保持功能本身干净,对于AOP,所以为什么不尝试在这种情况下使用装饰器。