我正在尝试使用Django/Python处理传入的JSON/Ajax请求。
request.is_ajax()
在请求上是True
的,但是我不知道JSON数据的有效负载在哪里。
request.POST.dir
包含以下内容:
['__class__', '__cmp__', '__contains__', '__copy__', '__deepcopy__', '__delattr__',
'__delitem__', '__dict__', '__doc__', '__eq__', '__ge__', '__getattribute__',
'__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__',
'__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__setitem__', '__str__', '__weakref__', '_assert_mutable', '_encoding',
'_get_encoding', '_mutable', '_set_encoding', 'appendlist', 'clear', 'copy', 'encoding',
'fromkeys', 'get', 'getlist', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues',
'keys', 'lists', 'pop', 'popitem', 'setdefault', 'setlist', 'setlistdefault', 'update',
'urlencode', 'values']
显然,请求post密钥中没有密钥。
当我查看Firebug中的POST时,会发现请求中发送了JSON数据。
发布于 2010-06-11 14:56:22
如果你在Django上发布JSON,我认为你需要request.body
( Django上的request.raw_post_data
< 1.4)。这将为您提供通过post发送的原始JSON数据。从那里你可以进一步处理它。
下面是一个使用JavaScript、jQuery、jquery-json和Django的示例。
JavaScript:
var myEvent = {id: calEvent.id, start: calEvent.start, end: calEvent.end,
allDay: calEvent.allDay };
$.ajax({
url: '/event/save-json/',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: $.toJSON(myEvent),
dataType: 'text',
success: function(result) {
alert(result.Result);
}
});
Django:
def save_events_json(request):
if request.is_ajax():
if request.method == 'POST':
print 'Raw Data: "%s"' % request.body
return HttpResponse("OK")
Django < 1.4:
def save_events_json(request):
if request.is_ajax():
if request.method == 'POST':
print 'Raw Data: "%s"' % request.raw_post_data
return HttpResponse("OK")
发布于 2010-07-14 17:13:29
我也有同样的问题。我发布了一个复杂的JSON响应,并且我无法使用request.POST字典读取我的数据。
我的JSON帖子数据是:
//JavaScript code:
//Requires json2.js and jQuery.
var response = {data:[{"a":1, "b":2},{"a":2, "b":2}]}
json_response = JSON.stringify(response); // proper serialization method, read
// http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
$.post('url',json_response);
在这种情况下,您需要使用aurealus提供的方法。读取request.body并使用json stdlib对其进行反序列化。
#Django code:
import json
def save_data(request):
if request.method == 'POST':
json_data = json.loads(request.body) # request.raw_post_data w/ Django < 1.4
try:
data = json_data['data']
except KeyError:
HttpResponseServerError("Malformed data!")
HttpResponse("Got json data")
发布于 2015-12-28 22:11:45
重要的是要记住,Python3有一种不同的方式来表示字符串-它们是字节数组。
使用Django 1.9和Python 2.7并在主体(而不是头部)中发送JSON数据时,您将使用如下内容:
mydata = json.loads(request.body)
但对于Django 1.9和Python 3.4,您将使用:
mydata = json.loads(request.body.decode("utf-8"))
我刚刚经历了这个学习曲线,制作了我的第一个Py3 Django应用程序!
https://stackoverflow.com/questions/1208067
复制相似问题