什麼叫序列化與反序列化
我們把變量從內存中變成可存儲或傳輸的過程稱之爲序列化,在Python中叫pickling,在其他語言中也被稱之爲serialization,marshalling,flattening等等,都是一個意思。
序列化之後,就可以把序列化後的內容寫入磁盤,或者通過網絡傳輸到別的機器上。
反過來,把變量內容從序列化的對象重新讀到內存裏稱之爲反序列化,即unpickling。
Django支持的序列化格式
Identifier Information
xml Serializes to and from a simple XML dialect.
json Serializes to and from JSON.
yaml Serializes to YAML (YAML Ain’t a Markup Language). This serializer is only available if PyYAML is installed.
這裏只介紹關於json的django的序列化格式
Django的序列化
對於Django的Queryset<Queryset [object,object,object]>這種關於django的Querysetset對象這種是不能用python的json方法,這時候就需要用到django的 serializers
Django序列化對象使用serializers:
from django.core import serializers
data = serializers.serialize("序列化格式",QuerySet )
傳遞給 serialize 方法的參數有二:一個序列化目標格式,另外一個是序列號的對象QuerySet. (事實上,第二個參數可以是任何可迭代的Django Model實例,但它很多情況下就是一個QuerySet).
例如:
from django.core import serializers
ret = models.BookType.objects.all()
data = serializers.serialize("json", ret)
python基本類型的序列化
關於python一些內置一些類型(例如:字典,列表,元祖。。。)的序列化,就用json 就可以了
只要不是關於django對象的序列化,就用json.dumps
例如:
import json
#ret1 = models.BookType.objects.all().values('caption')
#ret1['列名'] = list(ret1)
提示:.
values取到的格式是這種<querytset [{key:value},{key:value}.......]> 列表裏面的字典類型的格式
values_list 格式是這種<querytset [(),(),(),()......]> 列表裏面元祖的格式
ret = models.BookType.objects.all().values_list('caption') ret=list(ret) result = json.dumps(ret)