def my_view(request, someid=None):
if request.method == 'GET':
# do stuff
return HttpResponse({})
elif request.method == 'PUT':
print request.body
print request.PUT
print json.loads(request.body)
return HttpResponse({})
这是我的观点,我正在发出PUT请求(使用Postman-an api模拟器)
x-www-form-urlencode
当我request.body
时,它会以a=1&b=2&c=3
的形式打印我发送的所有数据。因此,当我执行json.loads(request.body)
时,会引发值错误no json object could be decoded
。这是可以理解的。 json.loads需要一个json数据。
但是当我打印request.PUT
时,它会显示object has no attribute PUT
。我们通常会request.GET
或request.POST
,对吗?但为什么不'PUT'?。
所以我有两个问题 -
1)如何将此request.body
格式转换为python字典?
2为什么我无法打印request.PUT
我甚至在'PUT'区块中尝试了request.POST
,但它是空的。
这里有类似的问题 ValueError: No JSON object could be decoded - Django request.body
但它不完全相同,这可能会在POST块中出现问题。
除此之外,我需要request.body,我不想手动提取像
这样的字段put = QueryDict(request.body)
description = put.get('description')
...
有许多领域,所以我不能这样做。
答案 0 :(得分:2)
试试这个
from django.http import QueryDict
qd = QueryDict(request.body)
put_dict = {k: v[0] if len(v)==1 else v for k, v in qd.lists()}
。
现在您可以通过**put_dict
OR
一个班轮
put_dict = {k: v[0] if len(v)==1 else v for k, v in QueryDict(request.body).lists()}