为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2019-03-27 20:17:14
如何在Django中接收JSON格式的数据
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

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

  • 用户名username

  • 密码password

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<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数据类型,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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)


 

 


查看完整回答
反对 回复 2019-03-30
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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返回.



查看完整回答
反对 回复 2019-03-30
  • 2 回答
  • 0 关注
  • 4172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信