6

強制ダウンロード用の簡単なコードを1つ開発していますが、問題はGETメソッドでエラーが発生しないのに、postメソッドリクエストで「405メソッドが許可されていません」というエラーが発生することです。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"

キーを使用してリクエストすると、getメソッド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 MethodNotAllowedエラーが発生します。

これに対する解決策はありますか?

4

1 に答える 1

12

ルーターはmethod、メソッドのリストではなく、パラメーターで1つのメソッドのみを取ります。代わりにいくつかの@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

アップデート

最近のBottleバージョンでは、メソッドのリストを指定できます:http: //bottlepy.org/docs/dev/api.html#bottle.Bottle.route

于 2012-10-09T11:39:52.150 に答える