DRF中序列化器定義及使用


首先需要明白序列化和反序列化的定義及作用:

  序列化是將程序語言轉換為JSON/XML; 反序列化是將JSON/XML轉換為程序語言;

  對應到Django中,序列化即把模型對象轉換為字典形式, 在返回給前端,主要用於輸出, 反序列化是將接受前端的字典類型數據,通過驗證再轉換

  為模型對象.

  序列化器的作用:

    1.  進行數據的校驗
    2.  對數據對象進行轉換

環境安裝與配置

DRF需要以下依賴:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
  • Django (1.10, 1.11, 2.0)

DRF是以Django擴展應用的方式提供的.(若沒有Django環境,需要先創建環境安裝Django)

1. 安裝DRF

pip install djangorestframework 

2. 添加rest_framework應用

在工程中的settings.py文件的INSTALLED_APPS中添加'rest_framework'。

INSTALLED_APPS = [ ... 'rest_framework', ]

定義Serializer

1. 定義方法

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) bcomment = serializers.IntegerField(label='評論量', required=False) image = serializers.ImageField(label='圖片', required=False)

2. 字段與選項

常用字段類型:

字段 字段構造方式
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=<a_field_instance>, min_length=None, max_length=None)
DictField DictField(child=<a_field_instance>)

選項參數

參數名稱 作用
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頁面時,顯示的字段幫助提示信息

3. 創建Serializer對象

定義好Serializer類后,就可以創建Serializer對象了。

Serializer的構造方法為:

Serializer(instance=None, data=empty, **kwarg) 

說明:

1)用於序列化時,將模型類對象傳入instance參數

2)用於反序列化時,將要被反序列化的數據傳入data參數

3)除了instance和data參數外,在構造Serializer對象時,還可通過context參數額外添加數據,如

serializer = AccountSerializer(account, context={'request': request}) 

通過context參數附加的數據,可以通過Serializer對象的context屬性獲取。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM