客户端,我发送了一个JSON数据,包括这样的列表类型数据。
$.ajax({
url: '/man/manual',
type: 'POST',
data: {'id':'','title':'ttt','description':'desc','steps':[{'title':'1'},{'title':'2'}]},
dataType : 'JSON',
success : function(data) {
console.log(data);
}
});
我试图访问这些数据。
title = request.POST['title']
description = request.POST['description']
steps = request.POST['steps']
for step in steps:
print(step.title)
但是我收到了错误。
Traceback:
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/views/generic/base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/views/generic/base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "/Users/sangwonlee/Makewith/trunk/MW_Service/mw_manual/views.py" in post
77. self.createManual(request)
File "/Users/sangwonlee/Makewith/trunk/MW_Service/mw_manual/views.py" in createManual
27. steps = request.POST['steps']
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/utils/datastructures.py" in __getitem__
322. raise MultiValueDictKeyError(repr(key))
Exception Type: MultiValueDictKeyError at /man/manual
Exception Value: "'steps'"
Request information:
GET: No GET data
POST:
description = 'desc'
steps[1][title] = '2'
steps[0][title] = '1'
title = 'ttt'
id = ''
如何从客户端更改我的代码以获取正确的数据。
答案 0 :(得分:2)
答案 1 :(得分:2)
首先,我将在AJAX请求的data
属性中发送的内容为JSON.stringify({...})
您现在发送的内容。
然后,在python代码上,我会这样做:import json; json.loads(request.body)
,这将为您提供python中的初始JS字典。然后你可以将它用作普通字典。
step
也是dictionary,因此打印它的正确方法是print(step['title'])
而不是print(step.title)
编辑:
如果json字符串不是纯ASCII,您可能需要先使用以下内容对其进行解码:json.loads(request.body.decode(), encoding='utf-8')