Django 序列化

序列化

背景

對於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)

參數

  • "json"  數據格式,
  • QuerySet  要序列化的數據對象,數據一般是ORM模型的QuerySet,一個可迭代的對象。

注意

對於具體的對象,沒法進行序列化,請使用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 裏面的序列化組件)

 

 

補充 

JsonResponse 使用 

能夠進行序列化 ,可是不能對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
相關文章
相關標籤/搜索