drf的序列化和反序列化
序列化器--Serializer
选项参数:
max_length 最大长度
min_length 最小长度
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展示页面时,显示的字段名称
help_text 用于HTML展示页面时,显示的字段帮助提示信息
注意事项:
1.使用序列化器的时候一定要注意,序列化器声明了以后,不会自动执行,需要我们在视图中进行调用才可以。
2.序列化器无法直接接收数据,需要我们在视图中创建序列化器对象时把使用的数据传递过来。
3.序列化器的字段声明类似于我们前面使用过的表单系统。
4.开发restful api时,序列化器会帮我们把模型数据转换成字典.
- drf提供的视图会帮我们把字典转换成json.或者把客户端发送过来的数据 转换字典
序列化器的使用
序列化器的使用分两个阶段:
1.在客户端请求时,使用序列化器可以完成对数据的反序列化。
2.在服务器响应时,使用序列化器可以完成对数据的序列化。
ModelSerializer组件
ModelSerializer与常规的Serializer相同,但提供了
* 基于模型类自动生成一系列字段
* 基于模型类自动为Serializer生成validators,比如unique_together
* 包含默认的create()和update()的实现
定义
class BookInfoSerializer(serializes.ModelSerializer):
class Meta:
el=BookInfo
fields='__all__'
model指明参照哪个模型类
fields指明为模型类的哪些字段生成
我们可以在python manage.py shell中查看自动生成的BookInfoSerializer的具体实现
指定字段
使用fields来明确字段,
__all__表示包含所有字段使用exclude可以明确排除掉哪些字段
通过read_only_fields指明只读字段,仅用于序列化输出的字段
使用extra_kwargs参数为ModelSerialize添加或修改原有的选项参数
""" 单表序列化总结
1)序列化与反序列功能可以整合成一个类,该类继承ModelSerializer
2)继承ModelSerializer类的资源序列化类,内部包含三部分
Meta子类、局部钩子、全局钩子
注:create和update方法ModelSerializer已经重写了,使用不需要重写
3)在Meta子类中:
用model来绑定关联的Model类
用fields来设置所有的序列化反序列化字段
用extra_kwargs来设置系统的校验规则
4)重要的字段校验规则:
read_only校验规则,代表该字段只参与序列化
write_only校验规则,代表该字段只参与反序列化
required校验规则,代表该字段在反序列化是是否是必填(True)还是选填(False),不能和read_only一起使用(规则冲突)
规则细节:
如果一个字段有默认值或是可以为空,没设置required规则,默认为False,反之默认值为True
如果一个Model字段即没有设置read_only也没设置write_only,该字段默认参与序列化及反序列化
5)自定义序列化字段:在Model类中,定义方法属性(可以返回特殊值,还可以完成连表操作),在序列化类的fields属性中可以选择性插拔
6)自定义反序列化字段:在Serializer类中,自定义校验字段,校验规则也只能在声明字段时设置,自定义的反序列化字段(如re_pwd),
必须设置write_only为True
"""
drf的序列化和反序列化的更多相关文章
- Django框架深入了解_02(DRF之序列化、反序列化)
序列化:将Python对象准换成json格式的字符串,反之即为反序列化 DRF的序列化使用过程: 使用drf的序列化组件 -1 新建一个序列化类继承Serializer -2 在类中写要序列化的字段 ...
- drf框架序列化和返序列化
0903自我总结 drf框架序列化和反序列化 from rest_framework import serializers 一.自己对于序列化和反序列化使用的分类 前后端交互主要有get,post,p ...
- drf框架 - 序列化组件 | Serializer
序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 序列化与反序列化 序列化: 将对象序列化成字符串用户传输 ...
- 第三章、drf框架 - 序列化组件 | Serializer
目录 第三章.drf框架 - 序列化组件 | Serializer 序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer( ...
- drf序列化与反序列化
序列化器-Serializer 定义序列化器 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serial ...
- DRF框架(二)——解析模块(parsers)、异常模块(exception_handler)、响应模块(Response)、三大序列化组件介绍、Serializer组件(序列化与反序列化使用)
解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 form-data/urlencoded/json 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些 ...
- drf序列化及反序列化
假如把drf看做一个汉堡包,我们之前讲的模块属于汉堡包前面的盖盖(请求模块.渲染模块)和底底(异常模块.解析模块.响应模块),但是真正中间的夹心没有讲,那么今天我就和大家来看一下汉堡包的夹心(序列化及 ...
- drf序列化和反序列化
目录 drf序列化和反序列化 一.自定义序列化 1.1 设置国际化 二.通过视图类的序列化和反序列化 三.ModelSerializer类实现序列化和反序列化 drf序列化和反序列化 一.自定义序列化 ...
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
随机推荐
- 目标检测,主要问题发展,非极大值抑制中阈值也作为参数去学习更满足end2end,最近发展趋势和主要研究思路方向
目标检测,主要问题发展,非极大值抑制中阈值也作为参数去学习更满足end2end,最近发展趋势和主要研究思路方向 待办 目标检测问题时间线 特征金字塔加滑窗 对象框推荐 回归算法回归对象框 多尺度检测 ...
- loj6277 数列分块入门题1
裸题分块. #include <bits/stdc++.h> using namespace std; ],b[],n,m,t1,t2,t3,t4,sq; int main(){ ios: ...
- 占位 RK
占位 RK include: RK403 RK404
- navicat连接mysql8.0+版本报错2059
ERROR 2059 : Authentication plugin 'caching_sha2_password' cannot be loaded 问题: 连接Docker启动的mysql出现:E ...
- webpack 之使用vue
现在,我们希望在项目中使用vuejs,那么必然需要对其有所依赖,所以需要先就行安装 注:因为我们后续是在实际项目中也会使用vue的,所以并不是开发时依赖 npm install vue --save ...
- 一、c++语言基础
1. 程序员的第一条代码"Hello,world!" #include <cstdio> //头文件,主要负责输入.输出 using namespace std;//C ...
- 洛谷P1583 魔法照片
https://www.luogu.org/problem/P1583 话不多说,其实就是模拟,然后,各种繁琐 #include<bits/stdc++.h> using namespac ...
- 题解【洛谷P5959】[POI2018]Plan metra
题面 一道比较神仙的构造题. 首先确定 \(1\) 到 \(n\) 的路径长度,不妨设其长为 \(m\) . 通过观察发现,\(m\) 就是 \(\min_{1<i<n}\{dist_{1 ...
- Shell脚本查询磁盘数量
之前帮朋友写的脚本,运维大数据服务器时候用的. #!/bin/bash ##磁盘数量 Disk=$( fdisk -l |grep 'Disk' |grep 'sd' |awk -F , '{prin ...
- K-means VS K-NN and 手肘法
1. The difference between classification and clustering. from here. Classification: supervised learn ...