如何在Google App Engine Python的请求处理器中使用delete()方法

7 投票
4 回答
2087 浏览
提问于 2025-04-16 04:18

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

0

当然,你可以自己实现这个模拟,下面是伪代码(我对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的文档或手册。

4

HTML规范不允许表单使用DELETE方法,所以你可能无法通过表单让浏览器发送一个HTTP DELETE请求。一般来说,RequestHandler子类中的delete()方法是用在RESTful网络应用中,这种应用的客户端会知道如何发送DELETE请求,而不是使用普通的HTML表单。(如果是基于浏览器的客户端,你可以通过JavaScript使用XMLHttpRequest来发送DELETE请求。)

6

你可以使用一种请求方法,这种方法可以处理所有类型的请求,比如获取数据(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)的具体说明。

http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#RequestHandler_put

撰写回答