drf之序列化器

2021-10-24 23:40:55 字數 2852 閱讀 7711

1.drf框架定義的序列化流程

1.狹義上的序列化定義

資料流向:後端到前段

後端負責處理資料處理流程:

模型類物件–》字典–》json字串(drf約定的序列化流程)

1.通過django模型類獲取資料庫資料構建模型類物件

2.把模型類物件轉化為字典

3.把字典轉化為json格式的字串

2.drf框架的反序列化流程

資料流向:前段到後端

json字串–>字典–>資料校驗(產生有效資料)–>模型類物件(新建,更新)

二進位制轉化為字串再轉化為json字串

字串轉化為字典

資料校驗

模型類物件

資料庫增刪改查中的drf約定的序列化和反序列化業務

查詢(序列化):模型類物件–>字典–>json字串

新增(反序列化):json字串–>字典–>資料校驗–>有效資料–>新建模型物件

更新(反序列化):json字串–>字典–>資料校驗–>有效資料–>更新模型物件

刪除(規定為反序列化):根據路徑pk刪除模型類物件

2.廣義上的序列化定義

定義:相同的資料在不同型別(表現形式)之間的轉化,稱之為序列化,反序列化是與序列化相對的過程:序列化是乙個過程,中間可能經過多層轉化(我們往往最主要關注的是首尾)

a =

a:型別是字典,值(記錄的資料)是乙個人的資訊(鍵值對)

b =''

b:型別是字串(json格式),

import json

b = json.dumps(a)

a = json.loads(b)

c =[

("name"

,"yangyadong"),

("age",18

)]c :列表巢狀元組(元組恆定2個元素)

a =dict

(c)c-

->a:遍歷

字典,列表,字串,元組,集合,json字串

定義:用來執行序列化/反序列化操作的乙個工具

物件:操作模型類

作用:功能;

序列化:模型類物件–》使用序列化器–>字典—>json字串

反序列化器:json字串–>字典–>交給序列化器–>有效資料–>新建/更新模型類

模型類隱藏欄位也可以對映,只要模型類有的字段都可以對映

2.序列化器的定義

3.序列化器之序列化操作

3.2關聯巢狀序列化

兩大方向,三種形式

方向一:序列化主表資料的時候順帶著序列化關聯從表多個資料;

方向二:序列化從表資料的時候,順帶著序列化關**表多個資料;

形式一:關聯欄位的型別定義成:primarykeyrelatedfield(queryset,many)

形式二:stringrelatedfield:把關聯物件

4.序列化器之反序列化操作

4.1 反序列化操作值標準校驗流程

4.2反序列化操作之標準新建/更新流程

在子應用裡建立serializers.py

from rest_framework import serializers

# 1. 定義bookinfo模型類的序列化器

class

bookinfoserializers

(serializers, serializer)

:# 2. 通過定義模型類,同名類屬性,型別一一對應的形式,來指定參與序列化的字段,決定序列化結果(字典)有哪些字段

btitle = serializers.charfield(

) bpub_date = serializers.datefield(

) bread = serializers.integerfield(

) is_delete = serializers.booleanfield(

) image = serializers.imagefield(

)

標準序列化流程

序列化結果

序列化單一物件

獲取目標資料(被序列化操作的模型類物件,乙個或者多個)

例項化序列化器物件

獲取序列化的結果

python3 manage.py shell

from books.models import

*from book.serializers import

*

book = bookinfo.objects.

all()[

0]bs = bookinfoserializer(instance = book)

bs.data

序列化多個物件

python3 manage.py shell

from books.models import bookinfoserializers

#1. 獲取目標資料(被序列化操作的模型類物件,乙個或者多個)

books = bookinfo.objects.

all(

)books

#2.例項化序列化器物件(傳入目標資料)

bs = bookinfoserializer(instance = books, many =

true

)#3.獲取序列化的結果

bs.data

b1 = bs.data[0]

b1b1.get(

'title'

)

模型類三大屬性:id(主鍵)

id = serializers.integerfield()

related_named定義乙個主表隱藏欄位為heros

drf 序列化器

序列化器 和 django中 的 form 和 modelform 有類似的地方 因為 在 drf 中,沒有模板的概念,所以 序列化的主要作用 是對響應的資料做序列化的,還可以對 接收到的資料做序列化 serializer 序列化 查詢的結果queryset user.objects.all ser...

drf 序列化器

models.pyclass chargepolicydetail models.model purpose c models.apartment.purpose category c models.apartment.category name models.charfield max lengt...

如何使用DRF的序列化器之序列化

drf兩大利器為serizlizer序列化器和檢視,而序列化器又分為序列化和反序列化,本篇文章首先來看下drf序列化器的常用序列化方法。首先來看使用django開發rest介面時的表現,示例 如下 views.py from datetime import datetime class booksa...