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”: “123456@163.com”}}, {“model”: “ke24.user”, “pk”: “liushui0”, “fields”: {“psw”: “12345”, “mail”: “123@qq.com”}}, {“model”: “ke24.user”, “pk”: “liushui1”, “fields”: {“psw”: “123”, “mail”: “123456@qq.com”}}, {“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”: “123456@163.com”}, {“user_name”: “liushui0”, “psw”: “12345”, “mail”: “123@qq.com”}, {“user_name”: “liushui1”, “psw”: “123”, “mail”: “123456@qq.com”}, {“user_name”: “liushui11”, “psw”: “123456”, “mail”: “897564”}]
values() 转list
这种方法不需要导入方法,使用values方法获取一个可迭代的dict序列,在使用list函数转成list对象
获得的返回数据如下:
{"data": [{"user_name": "liushui", "psw": "123456", "mail": "123456@163.com"}, {"user_name": "liushui0", "psw": "12345", "mail": "123@qq.com"}, {"user_name": "liushui1", "psw": "123", "mail": "123456@qq.com"}, {"user_name": "liushui11", "psw": "123456", "mail": "897564"}]}
{"result": [{"model": "ke24.user", "pk": "liushui", "fields": {"psw": "123456", "mail": "123456@163.com"}}, {"model": "ke24.user", "pk": "liushui0", "fields": {"psw": "12345", "mail": "123@qq.com"}}, {"model": "ke24.user", "pk": "liushui1", "fields": {"psw": "123", "mail": "123456@qq.com"}}, {"model": "ke24.user", "pk": "liushui11", "fields": {"psw": "123456", "mail": "897564"}}]}