django框架学习:十四.django 查询结果转json

前言

django查询结果返回的都是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观,返回json数据需要用到JsonResponse ,django 查询数据库返回json数据有3种方法“:

serializers转json

model_to_dict转字典

values转list (最简单推荐此种方法)

JsonRespoonse

json是常见的数据交换格式,有时需要返回一个json格式的数据,而JsonResponse提供了一个快捷的方法。

属于HttpResponse的一个子类,用来帮助用户创建Json编码的响应。下面我们学习一下JsonResponse构造函数:

data:应该传递一个标准的跑一趟红字典给它,将其转换成json数据。

encoder:默认为django.core.serializers.json.DjangoJSONEncoder,用于序列化data,更多信息参见JSON序列化。

safe:默认为True,如果设置为False,可以传递任何对象进行序列化(否则,只允许dict实例)。

另外:默认Content-Type 头部设置为applicatyion-json

json_dumps_params:在1.9版本中新增,可以传递python标准的json库中,json.dump()方法处理后生成一个响应。

用法:

views.py文件导入JsonResponse,创建视图函数

 

urls.py文件路径添加访问路径

终端启动django服务:python manage.py runserver 0.0.0.0:8000

打开浏览器访问

serializers转json

django里有个serializers方法可以直接把查询的结果转成json数据

先导入serializers方法

from django.core import serializers

import json

配置urls.py 访问路径

 返回的结果如下:

{"result": [{"model": "ke24.user", "pk": "liushui", "fields": {"psw": "123456", "mail": "[email protected]"}}, {"model": "ke24.user", "pk": "liushui0", "fields": {"psw": "12345", "mail": "[email protected]"}}, {"model": "ke24.user", "pk": "liushui1", "fields": {"psw": "123", "mail": "[email protected]"}}, {"model": "ke24.user", "pk": "liushui11", "fields": {"psw": "123456", "mail": "897564"}}]}

 model_to_dict 转字典

上面的方法虽然可以转换成json数据,但是上面返回的结果里面有一些多余的字段modle和pk,不需要。

介绍一下第二种方法使用model_to_dict方法把查询的queryset寻列结果转成字典序列

 配置urls.py 访问路径

浏览器返回结果如下: 

[{"user_name": "liushui", "psw": "123456", "mail": "[email protected]"}, {"user_name": "liushui0", "psw": "12345", "mail": "[email protected]"}, {"user_name": "liushui1", "psw": "123", "mail": "[email protected]"}, {"user_name": "liushui11", "psw": "123456", "mail": "897564"}]

 

 values() 转list

这种方法不需要导入方法,使用values方法获取一个可迭代的dict序列,在使用list函数转成list对象

 

获得的返回数据如下:

{"data": [{"user_name": "liushui", "psw": "123456", "mail": "[email protected]"}, {"user_name": "liushui0", "psw": "12345", "mail": "[email protected]"}, {"user_name": "liushui1", "psw": "123", "mail": "[email protected]"}, {"user_name": "liushui11", "psw": "123456", "mail": "897564"}]}

 

{"result": [{"model": "ke24.user", "pk": "liushui", "fields": {"psw": "123456", "mail": "[email protected]"}}, {"model": "ke24.user", "pk": "liushui0", "fields": {"psw": "12345", "mail": "[email protected]"}}, {"model": "ke24.user", "pk": "liushui1", "fields": {"psw": "123", "mail": "[email protected]"}}, {"model": "ke24.user", "pk": "liushui11", "fields": {"psw": "123456", "mail": "897564"}}]}

猜你喜欢

转载自www.cnblogs.com/liushui0306/p/12624813.html