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
我什至尝试过request.POST
在“PUT” block 中,但它是空的。
这里也有人问过类似的问题 ValueError: No JSON object could be decoded - Django request.body
但它并不完全相同,这可能在 POST block 中存在问题。
除此之外,我需要request.body,我不想手动提取像
这样的字段put = QueryDict(request.body)
description = put.get('description')
...
有很多字段,所以我不能这样做。
最佳答案
试试这个
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
或者
一个内衬
put_dict = {k: v[0] if len(v)==1 else v for k, v in QueryDict(request.body).lists()}
关于python - Django: 'WSGIRequest' 对象没有属性 'PUT',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34024650/