django中序列化、反序列化过程
一、定義序列化器
a、如果需要使用DRF框架來實現(xiàn)序列化、反序列化、數(shù)據(jù)庫操作,在子應用中創(chuàng)建serializers.py文件
b、文件名推薦命名為serializers.py
在serializer.py文件中定義序列化器類
二、定義序列化器類規(guī)則說明
1、必須繼承Serializer類或者Serializer子類
2、定義的序列化器類中,字段名要與模型類中的字段名保持一致
3、定義的序列化器類的字段(類屬性)為Field子類
4、默認定義哪些字段,那么哪些字段就會返回前端;同時也必須得輸入(前端需要傳遞)
5、常用的序列化器字段類型:
IntegerField-》int
CharField-》str
BooleanField-》bool
DateTimeField-》datetime
6、id中的參數(shù):min_value=1,max_value=1000:表示限制id最小值不能小于1,,最 大值id不能大于1000
7、可以在序列化器中指定不同的選項
label和help_text,與模型類中的verbose_name和help_text參數(shù)一樣
IntegerField,可以使用max_value指定指定最大值,min_value指定最小值
CharField,可以使用max_length指定最大長度,min_length指定最小值
7、定義的序列化器字段中,required默認為True,說明默認定義的字段得必須輸入和輸出
8、如果在序列化器字段中,設置required=False,那么前端用戶可以不傳遞該字段
(校驗時會忽略該字段)所以不會報錯
9、如果未定義模型類中的某個字段,那么該字段不會輸入也不會輸出
10、需求:前端必須得輸入(反序列化輸入)name(必須得校驗),但是不會需要輸出(序列化輸出)
如果某個參數(shù)指定了write_only=True:那么該字段僅僅只輸入(反序列化輸入,做數(shù)據(jù)校驗),
不會輸出(序列化輸出),默認為write_only=False
11、前端可以不用傳遞,但是后端需要輸出?
如果某個參數(shù)指定了read_only=True:那么該字段僅僅只輸出(序列化輸出),
不會輸入(反序列化輸入,做數(shù)據(jù)校驗),默認為read_only=False
name必傳參數(shù)不能設置read_only=True
12、在序列化器類中定義的字段,默認allow_null=False,該字段不允許傳遞空值,
如果指定allow_null=True,那么該字段允許傳遞null
13、在序列化器類中定義CharField字段,默認allow_blank=False,該字段不允許為空字符串,
如果指定allow_blank=True,那么該字段允許傳遞空字符串
14、在序列化器類中定義的字段,可以使用default參數(shù)來指定默認值,如果指定了default參數(shù),那么用戶可以不用傳遞,會將default指定的值作為傳入?yún)?shù)。
三、引用序列化器
1、可以使用序列化器進行序列化輸出操作
a、創(chuàng)建序列化器類對象
b、可以將模型對象或者查詢集對象、普通對象、嵌套普通對象的列表,以instance關鍵字來傳遞參數(shù)
c、如果傳遞的是查詢集對象、嵌套普通對象的列表(多條數(shù)據(jù)),必須得設置many=True
d、如果傳遞的是模型對象,普通對象,不需要設置many=True
e、可以使用序列化器對象的.data屬性,獲取序列化器之后的數(shù)據(jù)(字典、嵌套字典的列表)
2、創(chuàng)建數(shù)據(jù)
3、獲取詳細數(shù)據(jù)
4、更新數(shù)據(jù)
5、刪除數(shù)據(jù)
不涉及序列化輸出操作
四、應用反序列化器
1、定義序列化器類,使用data關鍵字參數(shù)傳遞字典參數(shù)
2、可以使用序列化器對象調用.is_valid()方法,才會開始對前端輸入的參數(shù)進行校驗
3、如果校驗通過.is_valid()返回True,否則返回False
4、如果調用.is_valid()方法,添加raise_exception=True,校驗不通過會拋出異常,否則不會拋出異常
5、只有在調用.id_valid()方法之后,才可以使用序列化器對象調用.errors屬性,來獲取錯誤的提示信息(字典類型)
6、只有在調用.is_valid()方法之后,才可以使用序列化器對象調用.validated_data屬性,來獲取校驗通過之后的數(shù)據(jù),與json.loads轉化之后的數(shù)據(jù)有區(qū)別
1、創(chuàng)建數(shù)據(jù)
2、更新數(shù)據(jù)
3、刪除一條項目數(shù)據(jù)
4、獲取一條項目數(shù)據(jù)(獲取詳情數(shù)據(jù))
5、獲取所有項目數(shù)據(jù)(獲取列表數(shù)據(jù))不涉及反序列化輸入操作
總結
以上是生活随笔為你收集整理的django中序列化、反序列化过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Jenkins执行脚本,生成自动化测
- 下一篇: django中序列化器字段参数、关联字段