django序列化返回json数据

现有数据表
在这里插入图片描述

使用django取出数据,并返回浏览器为json格式

# _*_coding:utf-8_*_
from django.http import HttpResponse
from .models import Student
from django.core import serializers
import json

def index(request):
    result = Student.objects.all()
    
    result_serialize = serializers.serialize('json',result) 
    print(type(result_serialize))
    # 查询结果序列化,这个时候,result_serialize 还是字符类型,需要json.loads转化为json格式
    # 不转化为json格式也是可以的直接返回数据的,但是返回的数据没有经过过滤的
    return HttpResponse(result_serialize,"application/json")

这个时候打印的是字符类型,浏览返回"application/json" 有这个参数,浏览器会识别为json

<QuerySet [<Student: {'id': 1, 'name': '小明', 'sex': '男', 'age': 12, 'addr': '江西省'}>, <Student: {'id': 2, 'name': '小红', 'sex': '女', 'age': 10, 'addr': '深圳市'}>, <Student: {'
id': 3, 'name': '小黄', 'sex': '男', 'age': 11, 'addr': '北京市'}>, <Student: {'id': 4, 'name': '小张', 'sex': '男', 'age': 15, 'addr': '上海市'}>, <Student: {'id': 5, 'name': '小婷',
 'sex': '女', 'age': 14, 'addr': '安徽省'}>, <Student: {'id': 6, 'name': '小梅', 'sex': '女', 'age': 12, 'addr': '四川省'}>, <Student: {'id': 7, 'name': '小涛', 'sex': '男', 'age': 11
, 'addr': '河南省'}>, <Student: {'id': 8, 'name': '小龙', 'sex': '男', 'age': 14, 'addr': '湖南省'}>, <Student: {'id': 9, 'name': '小丽', 'sex': '女', 'age': 13, 'addr': '广州市'}>, <
Student: {'id': 10, 'name': '小左', 'sex': '男', 'age': 14, 'addr': '湖南省'}>, <Student: {'id': 11, 'name': '小肖', 'sex': '男', 'age': 12, 'addr': '山西省'}>]>                      

<class 'str'>
[28/Mar/2020 00:56:22] "GET /api/ HTTP/1.1" 200 1421

这是浏览器返回的内容,没有经过过滤

[{"model": "api.student", "pk": 1, "fields": {"name": "\u5c0f\u660e", "sex": "\u7537", "age": 12, "addr": "\u6c5f\u897f\u7701"}}, {"model": "api.student", "pk": 2, "fields": {"name": "\u5c0f\u7ea2", "sex": "\u5973", "age": 10, "addr": "\u6df1\u5733\u5e02"}}, {"model": "api.student", "pk": 3, "fields": {"name": "\u5c0f\u9ec4", "sex": "\u7537", "age": 11, "addr": "\u5317\u4eac\u5e02"}}, {"model": "api.student", "pk": 4, "fields": {"name": "\u5c0f\u5f20", "sex": "\u7537", "age": 15, "addr": "\u4e0a\u6d77\u5e02"}}, {"model": "api.student", "pk": 5, "fields": {"name": "\u5c0f\u5a77", "sex": "\u5973", "age": 14, "addr": "\u5b89\u5fbd\u7701"}}, {"model": "api.student", "pk": 6, "fields": {"name": "\u5c0f\u6885", "sex": "\u5973", "age": 12, "addr": "\u56db\u5ddd\u7701"}}, {"model": "api.student", "pk": 7, "fields": {"name": "\u5c0f\u6d9b", "sex": "\u7537", "age": 11, "addr": "\u6cb3\u5357\u7701"}}, {"model": "api.student", "pk": 8, "fields": {"name": "\u5c0f\u9f99", "sex": "\u7537", "age": 14, "addr": "\u6e56\u5357\u7701"}}, {"model": "api.student", "pk": 9, "fields": {"name": "\u5c0f\u4e3d", "sex": "\u5973", "age": 13, "addr": "\u5e7f\u5dde\u5e02"}}, {"model": "api.student", "pk": 10, "fields": {"name": "\u5c0f\u5de6", "sex": "\u7537", "age": 14, "addr": "\u6e56\u5357\u7701"}}, {"model": "api.student", "pk": 11, "fields": {"name": "\u5c0f\u8096", "sex": "\u7537", "age": 12, "addr": "\u5c71\u897f\u7701"}}]

在这里插入图片描述

如何取出经过过滤后的数据

def index(request):
    result = Student.objects.all()
    result_serialize = serializers.serialize('json',result)
    result_json = json.loads(result_serialize) # 对序列化之后的str类型数据进行转化为json对象
    for item in result_json:
        print(item['fields']) 				   # 提取 'fields'字段的内容
    return HttpResponse(result_serialize,"application/json")

经过过滤,数据就简洁多了,打印输出的内容为如下

{'name': '小明', 'sex': '男', 'age': 12, 'addr': '江西省'}                                                                                                                             
{'name': '小红', 'sex': '女', 'age': 10, 'addr': '深圳市'}                                                                                                                             
{'name': '小黄', 'sex': '男', 'age': 11, 'addr': '北京市'}                                                                                                                             
{'name': '小张', 'sex': '男', 'age': 15, 'addr': '上海市'}                                                                                                                             
{'name': '小婷', 'sex': '女', 'age': 14, 'addr': '安徽省'}                                                                                                                             
{'name': '小梅', 'sex': '女', 'age': 12, 'addr': '四川省'}                                                                                                                             
{'name': '小涛', 'sex': '男', 'age': 11, 'addr': '河南省'}                                                                                                                             
{'name': '小龙', 'sex': '男', 'age': 14, 'addr': '湖南省'}                                                                                                                             
{'name': '小丽', 'sex': '女', 'age': 13, 'addr': '广州市'}                                                                                                                             
{'name': '小左', 'sex': '男', 'age': 14, 'addr': '湖南省'}                                                                                                                             
{'name': '小肖', 'sex': '男', 'age': 12, 'addr': '山西省'}      

也可以对这个列表进行优化,具体看需求

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值