webapp2是否提供从HTML表单调用DELETE和PUT操作的机制?
给定以下的路由:
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 操作,但很多网络框架有一些特别的方式来支持这些操作。例如,可以提供一个隐藏的 _method 参数。
webapp2 是否自带支持 DELETE 和 PUT 操作的功能呢?
2 个回答
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")
2
webapp2可以接收这些方法,但在浏览器中并没有什么特别的支持来处理这些参数。