将数据从 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.py 的 updateItem 函数中添加这些行后,控制台中会显示错误-
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”对象没有属性“数据”的主要内容,如果未能解决你的问题,请参考以下文章