python - Django: 'WSGIRequest' 对象没有属性 'PUT'

标签 python django python-2.7 django-views

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.GETrequest.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/

相关文章:

python - 使用 OneToOneField 时 Django 模型 u'id' 发生冲突

javascript - Django-Angular CRUD 操作

python-2.7 - pyinstaller 和多个 tkinter 窗口的问题

python - 在python中的json文件中存储具有子列表的字符串列表

python - 带有来自 Pandas DataFrame 的数据的 Spacy NLP

python - 使用 cv2 显示unet预测图像

python - Django 返回不同于 python 解释器的算法结果

python - 使用 MySQL 时,Django IntegerField 将 0 作为 None 值检索

python - 在 python 中读取文件时意外中断

python - 命名元组的名称和引用可以不同吗?