如何在Google App Engine Python的请求处理器中使用delete()方法
在GAE Python中,我可以使用
class MyRequestHandler(webapp.RequestHandler):
def get(self):
pass #Do Something...
def post(self):
pass #Do Something...
来处理GET和POST请求。但是我该如何处理DELETE和PUT请求呢?我在API文档中看到了delete()和put(),但我不知道怎么写一个表单来模拟DELETE和PUT请求。
我知道在Rails中,我可以使用POST方法,并在表单中加一个隐藏字段来模拟这些请求,像这样:
<input type="hidden" name="_method" value="delete" />
而Rails会自动处理这些复杂的事情。
在GAE Python中有没有类似的方法呢?
我在谷歌上搜索过这个,但没有找到答案。
谢谢。
4 个回答
当然,你可以自己实现这个模拟,下面是伪代码(我对GAE的具体情况不太了解):
def post(self):
if request.get('_method', '') == 'delete':
return self.post()
如果你想真正测试PUT和DELETE这两个方法,你需要找到一种实际使用这些方法的方法,而不是仅仅模拟它们。比如,你可以使用curl来做到这一点,也就是说:
$ curl -X DELETE url
$ curl -T file url # for PUT
想了解更多信息,可以查看curl的文档或手册。
HTML规范不允许表单使用DELETE方法,所以你可能无法通过表单让浏览器发送一个HTTP DELETE请求。一般来说,RequestHandler子类中的delete()方法是用在RESTful网络应用中,这种应用的客户端会知道如何发送DELETE请求,而不是使用普通的HTML表单。(如果是基于浏览器的客户端,你可以通过JavaScript使用XMLHttpRequest来发送DELETE请求。)
你可以使用一种请求方法,这种方法可以处理所有类型的请求,比如获取数据(get)、发送数据(post)、删除数据(delete)和更新数据(put)。然后你可以根据请求的类型来进行相应的检查。
你可以查看这个链接了解更多:
http://gdata-python-client.googlecode.com/svn/trunk/pydocs/gdata.urlfetch.html
<form method="post" action="">
<input type="hidden" name="_method" value="put" />
<input type="text" name="name" value="" />
<input type="submit" value="Save" />
</form>
def post(self):
method= self.request.get("_method")
if method == 'put':
#call put() function as required
你也可以参考这个链接,了解关于更新数据(put)的具体说明。