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': '山西省'}      

也可以對這個列表進行優化,具體看需求

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章