6

我正在开发一个用于强制下载的简单代码,现在问题是我在 GET 方法中没有收到任何错误,但在发布方法请求中收到错误“405 Method Not Allowed”。我的 GET 方法代码。

@route('/down/<filename:path>',method=['GET', 'POST'])
    def home(filename):
        key = request.get.GET('key')
        if key == "tCJVNTh21nEJSekuQesM2A":        
            return static_file(filename, root='/home/azoi/tmp/bottle/down/', download=filename)
        else:
    return "File Not Found"

当我使用密钥请求时,它会在获取方法 http://mydomain.com/down/xyz.pdf?key=tCJVNTh21nEJSekuQesM2A时返回给我下载文件

现在我使用另一个代码来处理 POST 方法

@route('/down/<filename:path>',method=['GET', 'POST'])
    def home(filename):
        key = request.body.readline()
        if key == "tCJVNTh21nEJSekuQesM2A":        
            return static_file(filename, root='/home/azoi/tmp/bottle/down/', download=filename)
        else:
            return "File Not Found"

现在通过使用此代码,我无法处理 post 方法,即我从服务器收到 405 Method Not Allowed 错误。

有什么解决方案吗?

4

1 回答 1

12

路由器仅在method参数中采用一种方法,而不是方法列表。改用几个@route装饰器:

@route('/down/<filename:path>', method='GET')
@route('/down/<filename:path>', method='POST')
def home(filename):
    pass

查看文档以获取更多信息:http ://bottlepy.org/docs/dev/routing.html#routing-order

更新

最近的瓶子版本允许指定方法列表:http: //bottlepy.org/docs/dev/api.html#bottle.Bottle.route

于 2012-10-09T11:39:52.150 回答