如何在Django中接收JSON格式的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Django中接收JSON格式的数据相关的知识,希望对你有一定的参考价值。

下面通过一个例子说明如何从HTML中发送json,并在Django中接收json数据,在HTML中,可以通过JSON对象将数据以Json格式发送到服务器,假设在play.html中有以下内容要发送到服务器:

    用户名username

    密码password

    一个数组,其中每个元素包含: 游戏编号game_id和得分level

那么,,可以使用如下JavaScript(JQuery)代码:

<script type="text/javascript">
$(function() 
$(\'#upload\').click(function() 
var json_obj = 
username: $(\'#username\').val(),
password: $(\'#password\').val(),
datas: [
        
        game_id: $(\'#datas1\').val(),
        level: $(\'#level1\').val()
        ,
        
        game_id: $(\'#datas2\').val(),
        level: $(\'#level2\').val()
        
   ]
;    //JSON对象   

var json_str = JSON.stringify(json_obj);    //将JSON对象转变成JSON格式的字符串
    $.post("/datasave", json_str, callback, "json");
)

function callback(json)
$(\'#response\').html(\'code:\'+json[\'status\'][\'code\'] + "\\tmessage:" + json[\'status\'][\'message\']);

)
</script>

在上面的代码中,数据将发送到/datasave,在Django中使用request.raw_post_data,并借助simplejson来将其转换为字典dict数据类型,代码如下:

def datasave(request):
    dict = 
    info = \'Data log save success\'
    try:
        if request.method == \'POST\':
        //request.raw_post_data从客户端发送过来的原始数据,通过simplejson的loads方法将其转换为字典数据类型req
            req = simplejson.loads(request.raw_post_data)
            username = req[\'username\']
            password = req[\'password\']
            datas = req[\'datas\']
            game_id1 = datas[0][\'game_id\']
   except:
        import sys
        info = "%s || %s" % (sys.exc_info()[0], sys.exc_info()[1])

    dict[\'message\']=info
    dict[\'create_at\']=str(ctime())
    json=simplejson.dumps(dict)
    return HttpResponse(json)
参考技术A def datasave(request):
    dict = 
    info = 'Data log save success'
    try:
        if request.method == 'POST':
            req = simplejson.loads(request.raw_post_data)
            username = req['username']
            password = req['password']
            datas = req['datas']
            game_id1 = datas[0]['game_id']
   except:
        import sys
        info = "%s || %s" % (sys.exc_info()[0], sys.exc_info()[1])

    dict['message']=info
    dict['create_at']=str(ctime())
    json=simplejson.dumps(dict)
    return HttpResponse(json)

request.raw_post_data表示的是从客户端发送过来的原始数据,为了纯字符串, 通过simplejson的loads方法将其转换为字典数据类型req.
上面的代码也演示了如何以JSON格式作为响应值, 而非HTML, 即通过simplejson的dumps方法,
将字典数据dict序列化为字符串形式,将通过HttpResponse返回.

本回答被提问者和网友采纳

以上是关于如何在Django中接收JSON格式的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在Django中接收JSON格式的数据

如何在 Django 1.6 中使用 HTTP POST 请求接收 json 数据?

57. Django 2.1.7 查询数据返回json格式

在视图中获取 JSON 请求(使用 Django)

[TimLinux] JavaScript AJAX接收到的数据转换为JSON格式

如何从 django 视图发送 json 并在 HTML 上接收它