對於Django 的queryset 對象在傳遞給 前端的時候,前端是沒法識別的前端
所以須要存在一個轉換過程將 queryset 對象轉換成 字符串前端才能夠識別 django
QuerySet 沒法被 json 序列化,所以沒法傳值給前端json
from django.shortcuts import render, HttpResponse from app01 import models import json # Create your views here. def index(request): user = models.User.objects.all() data = json.dumps(user) return HttpResponse(locals())
TypeError: Object of type QuerySet is not JSON serializable
Django爲咱們提供了一個強大的序列化工具serializers。使用它也很簡單app
from django.shortcuts import render, HttpResponse from app01 import models from django.core import serializers # Create your views here. def index(request): user = models.User.objects.all() print(user) data = serializers.serialize("json",user) print("data:",data) # data: [{"model": "app01.user", "pk": 1, "fields": {"name": "yang", "password": "123456"}}] print(type(data)) # <class 'str'> return HttpResponse(data)
對於具體的對象,沒法進行序列化,請使用filter轉換成 QuerySet 對象後在使用。工具
還有某幾個版本以前的貌似時間格式也無法序列化。目前我用的 1.10.11已經支持時間字段的序列化了。spa
from django.shortcuts import render, HttpResponse from app01 import models from django.core import serializers # Create your views here. def index(request): user = models.User.objects.all().first() print(user) # yang print(type(user)) # <class 'app01.models.User'> data = serializers.serialize("json",user) # TypeError: 'User' object is not iterable print("data:",data) print(type(data)) return HttpResponse(data)
只想序列化某些指定的字段,能夠使用fields參數rest
from django.core import serializers data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
for obj in serializers.deserialize("xml", data): do_something_with(obj)
對於 這個 序列化方式並非很推薦code
他返回的數據會不少很雜亂很不方便使用,xml
後期咱們會使用 另外一個更加方便的序列化工具。這個僅做了解。對象
(沒錯,就是 rest_framework 裏面的序列化組件)
能夠進行序列化 ,可是不能對model對象以及 QuerySet對象序列化
示例
from django.shortcuts import render, HttpResponse from django.http import JsonResponse from app01 import models from django.core import serializers import json # Create your views here. def index(request): dic = {"yang": "tuo"} # return HttpResponse(dic) # yang # return HttpResponse(dic.items()) # ('yang', 'tuo') # response = JsonResponse(dic) # return response # {"yang":"tuo"} # return JsonResponse(dic) # {"yang":"tuo"} # user = models.User.objects.all().first() # response = JsonResponse(user,safe=False) # return response # Object of type User is not JSON serializable # user = models.User.objects.all() # response = JsonResponse(user, safe=False) # return response # Object of type QuerySet is not JSON serializable