序列化是將程式語言轉換為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...