DRF中序列化器定義及使用

2022-07-06 23:36:13 字數 4257 閱讀 4436

序列化是將程式語言轉換為json/xml; 

反序列化是將json/xml轉換為程式語言;

對應到django中,序列化即把模型物件轉換為字典形式, 在返回給前端,主要用於輸出, 反序列化是將接受前端的字典型別資料,通過驗證再轉換

為模型物件.

序列化器的作用:

進行資料的校驗

對資料物件進行轉換

drf需要以下依賴:

drf是以django擴充套件應用的方式提供的.(若沒有django環境,需要先建立環境安裝django)

pip install djangorestframework
...

'rest_framework',

]django rest framework中的serializer使用類來定義,須繼承自rest_framework.serializers.serializer。

例如建立以下序列化器, 具體的字段型別及選項引數如下:

class bookinfoserializer(serializers.serializer):

"""圖書資料序列化器"""

id = serializers.integerfield(label='id', read_only=true)

btitle = serializers.charfield(label='名稱', max_length=20)

bpub_date = serializers.datefield(label='發布日期', required=false)

bread = serializers.integerfield(label='閱讀量', required=false)

image = serializers.imagefield(label='', required=false)

常用字段型別:

欄位字段構造方式

booleanfield

booleanfield()

nullbooleanfield

nullbooleanfield()

charfield

charfield(max_length=none, min_length=none, allow_blank=false, trim_whitespace=true)

emailfield

emailfield(max_length=none, min_length=none, allow_blank=false)

regexfield

regexfield(regex, max_length=none, min_length=none, allow_blank=false)

slugfield

slugfield(maxlength=50, min_length=none, allow_blank=false) 

正則字段,驗證正則模式 [a-za-z0-9-]+

urlfield

urlfield(max_length=200, min_length=none, allow_blank=false)

uuidfield

uuidfield(format='hex_verbose') 

format: 

1)'hex_verbose'"5ce0e9a5-5ffa-654b-cee0-1238041fb31a"

2)'hex'"5ce0e9a55ffa654bcee01238041fb31a"

3)'int'- 如:"123456789012312313134124512351145145114"

4)'urn'如:"urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a"

ipaddressfield

ipaddressfield(protocol='both', unpack_ipv4=false, **options)

integerfield

integerfield(max_value=none, min_value=none)

floatfield

floatfield(max_value=none, min_value=none)

decimalfield

decimalfield(max_digits, decimal_places, coerce_to_string=none, max_value=none, min_value=none)

max_digits: 最多位數

decimal_palces: 小數點位置

datetimefield

datetimefield(format=api_settings.datetime_format, input_formats=none)

datefield

datefield(format=api_settings.date_format, input_formats=none)

timefield

timefield(format=api_settings.time_format, input_formats=none)

durationfield

durationfield()

choicefield

choicefield(choices)

choices與django的用法相同

multiplechoicefield

multiplechoicefield(choices)

filefield

filefield(max_length=none, allow_empty_file=false, use_url=uploaded_files_use_url)

imagefield

imagefield(max_length=none, allow_empty_file=false, use_url=uploaded_files_use_url)

listfield

listfield(child=, min_length=none, max_length=none)

dictfield

dictfield(child=)

選項引數

引數名稱

作用max_length

最大長度

min_lenght

最小長度

allow_blank

是否允許為空

trim_whitespace

是否截斷空白字元

max_value

最小值min_value

最大值通用引數:

引數名稱

說明read_only

表明該字段僅用於序列化輸出,預設false

write_only

表明該字段僅用於反序列化輸入,預設false

required

表明該字段在反序列化時必須輸入,預設true

default

反序列化時使用的預設值

allow_null

表明該欄位是否允許傳入none,預設false

validators

該欄位使用的驗證器

error_messages

包含錯誤編號與錯誤資訊的字典

label

用於html展示api頁面時,顯示的欄位名稱

help_text

用於html展示api頁面時,顯示的字段幫助提示資訊

定義好serializer類後,就可以建立serializer物件了。

serializer的構造方法為:

serializer(instance=none, data=empty, **kwarg)

說明:

1)用於序列化時,將模型類物件傳入instance引數

2)用於反序列化時,將要被反序列化的資料傳入data引數

3)除了instance和data引數外,在構造serializer物件時,還可通過context引數額外新增資料,如

serializer = accountserializer(account, context=)

通過context引數附加的資料,可以通過serializer物件的context屬性獲取。

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 中的序列化器

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