将数据从 JSON 导入 django AttributeError:“WSGIRequest”对象没有属性“数据”

Posted

技术标签:

【中文标题】将数据从 JSON 导入 django AttributeError:“WSGIRequest”对象没有属性“数据”【英文标题】:Importing Data from a JSON to django AttributeError: 'WSGIRequest' object has no attribute 'data' 【发布时间】:2021-01-09 15:21:54 【问题描述】:

我正在尝试从教程系列-Django Ecommerce Website | Add to Cart Functionality | Part 3 in django freamwork 中制作一个电子商务网站。

我的 views.py 是:

def updateItem(request):
    data = json.loads(request.data)
    productId = data['productId']
    action = data['action']

    print('productId: ', productId)
    print('action: ', action)
    return JsonResponse('Item was added', safe=False)

我的js文件是:

var updateBtns = document.getElementsByClassName('update-cart')
console.log('updateBtns length:', updateBtns.length);
for(var i=0; i<updateBtns.length; i++)
  updateBtns[i].addEventListener('click', function()
    var productId = this.dataset.product
    var action = this.dataset.action
    console.log('product ID: ', productId, "Action: ", action)
    console.log('User: ', user)
    if (user == 'AnonymousUser')
      console.log('user is not authnticated');
    
    else
      updateUserOrder(productId, action);
    
  )

function updateUserOrder(productId, action)
  console.log('user is authenticatred, sending data')
  var url = '/update_item/'
  fetch(url,
    method: 'POST',
    headers: 
      'Content-Type': 'application/json',
      'X-CSRFToken': csrftoken,
    ,
    body: JSON.stringify('productId': productId, 'action': action)
  )
  .then((response) =>
    return response.json()
  )
  .then((data) =>
    console.log('data: ', data)
  )

我的问题是在 views.pyupdateItem 函数中添加这些行后,控制台中会显示错误-

data = json.loads(request.data)
AttributeError: 'WSGIRequest' object has no attribute 'data'

我该如何解决这个问题?其实我不太清楚rest API或json。

【问题讨论】:

【参考方案1】:

做:

data = json.loads(request.body)

正如控制台中的建议:'WSGIRequest' object has no attribute 'data',这是完全正确的。但是,它有一个名为body的属性

具体来说,在你的 js fetch 中你已经向request.body 发送了数据:

    body: JSON.stringify('productId': productId, 'action': action) // Here

更多关于django_response_and_request

【讨论】:

我尝试了 request.POST 行,现在出现了以下错误-TypeError: JSON object must be str, bytes or bytearray, not QueryDict 您不必对帖子数据进行字符串化。我会相应地更新。 了解TypeError: the JSON object must be str, bytes or bytearray, not QueryDict,see here 感谢 Biplove Lamichhane,错误消失了,但出现了另一个问题。我需要在控制台中打印 productID 但这行-print('productId: ', productId),我不知道为什么,但现在控制台中没有显示任何消息 你有什么错误...或者只是没有像productId: 那样显示?【参考方案2】:

作为Biplove Lamichhane对this answer的修改:

data = json.loads(request.body)

我需要这样做:

data = json.loads(request.body.decode("utf-8"))

当我从 UI 获取字节时。

【讨论】:

以上是关于将数据从 JSON 导入 django AttributeError:“WSGIRequest”对象没有属性“数据”的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 文件导入 Django 数据库?

使用 JSON 的 Django 导入向导

不支持按文件名导入

将数据从 excel 电子表格导入 django 模型

如何从 json 数据推断 Django 模型?

将 JSON 数组从 Django 视图返回到模板