Django – 在PUT / DELETE请求上存储的参数在哪里?
我想按照我的新Django项目的RESTful模式,我想知道PUT / DELETE请求时,参数是在哪里。
据我所知,我只在请求中看到GET&POST QueryDict,没有其他人。 是Django添加一个新的PUT或DELETE QueryDict有关的请求,或者它将参数添加到GET或POST QueryDict?
谢谢你的帮助。
我假设你问的是如果你有一个这样的方法:
def restaction(request, id): if request.method == "PUT": someparam = request.PUT["somekey"]
答案是否定的,你不能。 Django不为PUT,OPTIONS和DELETE请求构build这样的字典, 这里解释了推理。
为了总结它,REST的概念是,交换的数据可能比简单的键值映射更复杂。 例如,PUTting一个图像,或使用json。 一个框架无法知道你想要发送数据的多种方式,所以它显而易见 – 让我们来处理这个问题。 在给出相同响应的情况下,也可以看到这个问题的答案。
现在,你在哪里find数据? 那么根据文档 ,django 1.2的functionrequest.raw_post_data
。 作为一个头, 它看起来像django 1.3将支持 request.read()
即文件式的语义。
我正在使用django v1.5。 而我主要使用QueryDict来解决这个问题:
from django.http import QueryDict put = QueryDict(request.body) description = put.get('description')
并在*。咖啡
$.ajax url: "/policy/#{policyId}/description/" type: "PUT" data: description: value success: (data) -> alert data.body fail: (data) -> alert "fail"
你可以去这里find更多的信息。 我希望这可以帮助你。 祝你好运:)
Ninefiger的答案是正确的。 但是,有一些解决方法。
如果您正在为Django项目编写REST风格的API,我强烈build议您使用tastypie 。 你将节省大量的时间,并保证你的API更结构化的forms。 你也可以看看它是如何做到的(访问PUT和DELETE数据)。
你可以在django-piston的代码中看到一个为PUT方法获取QueryDict的例子(参见coerce_put_post方法)