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 回答