2

次のルートがあるとします。

Route(r'/app/product/<id:\d+>', handler='app.handlers.ProductHandler:show', 
methods=['GET'], name='show-product'), 
Route(r'/app/product/<id:\d+>', 
handler='app.handlers.ProductHandler:delete', methods=['DELETE'], 
name='delete-product'), 

および次の形式:

<form action="{{ uri_for('delete-product', id=product.key.id()) }}" 
method="DELETE"> 

このフォームの送信は、show-product ルートによって取得されます。

DELETE および PUT アクションは、ほとんどのブラウザーでサポートされていませんが、多くの Web フレームワークでは、それらをサポートする魔法がサポートされています。たとえば、非表示の _method パラメータを提供します。

webapp2 には、そのままで DELETE および PUT アクションをサポートするものがありますか?

4

2 に答える 2

2

webapp2 はこのメソッドを受け取ることができますが、ブラウザーでこのパラメーターをサポートする魔法はありません。

于 2013-03-15T15:51:37.103 に答える
1

この機能を WebApp2 に追加するのは比較的簡単です。

このデコレーターはhttp_verbパラメーターの値を探し、見つかった場合は適切なリクエスト ハンドラー メソッドを呼び出します。

def spoof_rest(func):
    """ Decorator to handle spoofing RESTful verbs """
    def inner(handler):
        params = handler.request.params
        if 'http_verb' in params:
            if params['http_verb'] == 'PUT':
                handler.put()
            elif params['http_verb'] == 'DELETE':
                handler.delete()
    return inner


class MyRoute(RequestHandler):

    @spoof_rest
    def get(self):
        self.response.write("GET request")

    @spoof_rest
    def post(self):
        self.response.write("POST request")

    def put(self):
        self.response.write("PUT request")

    def delete(self):
        self.response.write("DELETE request")
于 2013-06-19T15:31:25.707 に答える