序列化定義:
序列化器的作用:
封裝了序列化操作
封裝了反序列化操作
反序列化使用
序列化流程:
模型類物件 ——> 字典 ——> json格式字串1)獲取目標資料(乙個或者多個模型類物件)
# 單一目標資料
book = bookinfo.objects.get(pk=2)
# 多個目標資料
books = bookinfo.objects.
all(
)
2)例項化序列化器物件(通過instance引數傳入目標資料,通過many=true引數來確定目標資料是否是多個,true代表多個,預設為false表示乙個)
# 單一資料
bs = bookinfoserializer(instance=book)
# 多個資料
bs = bookinfoserializer(instance=books, many=
true
)
3)通過序列化器的data屬性獲取序列化裡的結果
bs.data
'''單一結果,獲取結果為字典(dict)格式資料,包括欄位和值,
如:多個結果,獲取結果為列表(list),裡面包含多個有序字典(ordereddict),
如:[ordereddict(),ordereddict()...]
'''
1)序列化為主鍵
2)序列化為__str__方法返回的結果
3)自定義序列化
關聯巢狀序列化有兩個方向
(1)序列化從表物件,巢狀序列化與之關聯的乙個主表物件
如下圖**中,從表heroinfo的字段hbook代表關聯的單一主表物件
class
herinfoserializer
(serializers.serializer)
:# 關聯物件字段序列化方式
# (1)主鍵序列化
hbook = serializer.primarykeyrelatedfield(read_only=
true
)# (2)序列化為關聯物件__str__方法返回的結果
hbook = serializer.stringrelatedfield(
)# (3)自定義序列化
hbook = bookinfoserializer(
)
(1)序列化**主表物件**,巢狀序列化與之關聯的**多個從表物件**
from django.db import models
# 定義圖書模型類bookinfo
class
bookinfo
(models,model)
:# 略...
# 預設情況下:heroinfo_set --規律--> 從表模型類小明_set
# 從表通過設定related_name來自定義隱藏欄位heros代表當前書本物件關聯的多個從表英雄物件
class
heroinfo
(models.model)
:# 略...
# heroinfo物件.hbook --> 關聯的bookinfo單一物件
# 從表中外鍵關聯字段榆樹條件related_name定義主表模型類隱藏字段(該主表隱藏字段代表從表多條資料)
hbook = models.foreignkey(bookinfo, related_name=
'heros'
,on_delete=models.cascade,
verboser_name=
'圖書'
)# 外來鍵
# 略...
def__str__
(self)
:return self.hname
如下圖**中,主表bookinfo的字段heros代表關聯的多個從表物件
class
bookinfoserializer
(serializers.serializer)
:# heros隱藏字段,代表heroinfo模型類「多個」物件
heros = serializers.primarykeyrelatedfield(read_only=
true
, many=
true
) heros = serializers.stringrelatedfield(many=
true
) heros = newheroinfoserializer(many=
true
)
反序列化流程:
json字串 ——> 字典 ——> 校驗 ——> 新建/更新獲取被校驗的前端傳值(字典)
book_info =
例項化序列化器物件(通過data引數傳入被校驗的原始資料)
bs = bookinfoserializer(data=book_info)
啟動校驗流程
# 返回值true或者false,來表示成功
bs.is_valid(
)# 校驗失敗,將會以丟擲異常validationerror的形式,表示校驗失敗
bs.is_valid(raise_exception=
true
)
判斷校驗成功與否
(1)當且僅當校驗成功,才會生成有效資料
# 獲取有效資料
bs.validated_data
(2)如果失敗檢視錯誤提供資訊
bs.errors
使用required=true來設定當前欄位必傳,required=false表示可傳可不傳
python marshal 物件序列化和反序列化
有時候,要把記憶體中的乙個物件持久化儲存到磁碟上,或者序列化成二進位制流通過網路傳送到遠端主機上。python中有很多模組提供了序列化與反序列化的功能,如 marshal,pickle,cpickle等等。今天就講講marshal模組。注意 marshal並不是乙個通用的模組,在某些時候它是乙個不被...
序列化和反序列化
先定義乙個類 serializable xmlroot shintech public class person set public string name set public person this 0,string.empty public person int m age,string m...
序列化和反序列化
引文來自 序列化和反序列化我們可能經常會聽到,其實通俗一點的解釋,序列化就是把乙個物件儲存到乙個檔案或資料庫欄位中去,反序列化就是在適當的時候把這個檔案再轉化成原來的物件使用。using system using system.collections using system.text namesp...