首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在提供静态文件时将@bottle.route转换为bottle.route()?

如何在提供静态文件时将@bottle.route转换为bottle.route()?
EN

Stack Overflow用户
提问于 2015-11-25 18:10:48
回答 2查看 107关注 0票数 1

我通常使用方法版本来处理瓶子中的路由。

代码语言:javascript
复制
bottle.route("/charge", "GET", self.charge)

瓶子文档在很大程度上依赖于@route装饰器来处理路由,我有一种情况,我不知道如何转换成我最喜欢的版本。服务静态文件上的文档使用下面的示例

代码语言:javascript
复制
from bottle import static_file

@route('/static/<filename:path>')
def send_static(filename):
    return static_file(filename, root='/path/to/static/files')

有没有办法把它变成某种

代码语言:javascript
复制
bottle.route("/static", "GET", static_file)

建筑?特别是,我对如何将filenameroot参数传递给static_file感到困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-26 15:59:20

接受的答案不能很好地解决你的问题,所以我会插嘴的。你似乎试图使用瓶子的static_file作为一个路线目标,但它并不意味着要这样使用。正如您引用的示例所演示的那样,static_file是从路由目标函数中调用的。下面是一个完整的工作示例:

代码语言:javascript
复制
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)

示例用法:

代码语言:javascript
复制
% echo "this is foo" > /tmp/foo
% curl http://localhost:8080/static/foo
this is foo

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2015-11-26 06:37:13

由于您希望使用单个方法,所以必须自己将参数传递给static_file,并且首先使用re来解析它们。

代码将如下所示:

代码语言:javascript
复制
from bottle import Router

app.route('/static/:filename#.*#', "GET", static_file(list(Router()._itertokens('/static/:filename#.*#'))[1][2], root='./static/'))

这有点长,如果您想要解析外部的参数,则可能会添加另一个解析函数。

我知道您想让您的路由器看起来整洁有序,但是对于AOP来说,装饰器要丰富功能,但要保持功能本身的干净,那么为什么不尝试在这种情况下使用装饰器呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33923610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档