序列化器--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时,序列化器会帮我们把模型数据转换成字典.

    1. 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的序列化和反序列化的更多相关文章

  1. Django框架深入了解_02(DRF之序列化、反序列化)

    序列化:将Python对象准换成json格式的字符串,反之即为反序列化 DRF的序列化使用过程: 使用drf的序列化组件 -1 新建一个序列化类继承Serializer -2 在类中写要序列化的字段 ...

  2. drf框架序列化和返序列化

    0903自我总结 drf框架序列化和反序列化 from rest_framework import serializers 一.自己对于序列化和反序列化使用的分类 前后端交互主要有get,post,p ...

  3. drf框架 - 序列化组件 | Serializer

    序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 序列化与反序列化 序列化: 将对象序列化成字符串用户传输 ...

  4. 第三章、drf框架 - 序列化组件 | Serializer

    目录 第三章.drf框架 - 序列化组件 | Serializer 序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer( ...

  5. drf序列化与反序列化

    序列化器-Serializer 定义序列化器 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serial ...

  6. DRF框架(二)——解析模块(parsers)、异常模块(exception_handler)、响应模块(Response)、三大序列化组件介绍、Serializer组件(序列化与反序列化使用)

    解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 form-data/urlencoded/json 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些 ...

  7. drf序列化及反序列化

    假如把drf看做一个汉堡包,我们之前讲的模块属于汉堡包前面的盖盖(请求模块.渲染模块)和底底(异常模块.解析模块.响应模块),但是真正中间的夹心没有讲,那么今天我就和大家来看一下汉堡包的夹心(序列化及 ...

  8. drf序列化和反序列化

    目录 drf序列化和反序列化 一.自定义序列化 1.1 设置国际化 二.通过视图类的序列化和反序列化 三.ModelSerializer类实现序列化和反序列化 drf序列化和反序列化 一.自定义序列化 ...

  9. 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 ...

随机推荐

  1. spring框架中用到了哪些设计模式

    1.代理模式:在AOP和remoting中被用的比较多 2.单例模式:在spring配置文件中定义的bean默认为单例模式 3.模板方法模式:解决代码重复问题 4.前端控制器模式:spring提供了D ...

  2. 菜不成声 的 ac自动机 刷题记录

    HDU2222 Keywords Search 模板题.数组开小了结果会T... 代码 #include <bits/stdc++.h> #define nmax 10010 using ...

  3. 占位 SC

    占位 SC include: SC404 SC405

  4. 跨域 node git

    promise 异步回调地狱:就是多个异步请求嵌套的表现 瑕疵:后期维护难 解决:通过promise技术 什么是promise:就是一种异步编程的解决方案 有三个状态:进行中.成功了,失败了 var ...

  5. Pandownload---windows下几乎无敌的网盘下载神器

    近几天光顾着mac了,今天咱来聊聊Windows. 这个就不多说了,直接贴图. 网页版截图. 电脑版截图. 网页版2020.2.1的时候是失效的,别问我为什么不现在测试,用不着. 不用担心不知道密码, ...

  6. python爬虫匹配实现步骤

    import requests,re url='https://movie.douban.com/top250' urlcontent=requests.get(url).text #正则 ''' 实 ...

  7. R parallel包实现多线程1

    并行执行 Yes! Well done! Socket clusters are initialized without variables, so a_global_var wasn't found ...

  8. SQLAlchemy,flask-sqlalchemy

    SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用 ...

  9. ansible笔记(12):变量(一)

    1.定义变量规范 先说说怎样定义变量,变量名应该由字母.数字.下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名. 2.定义变量,使用关键字:vars 定义变量用vars,调用 ...

  10. java继承与多态课后作业

    1.动手实验 源码 class Grandparent {     public Grandparent()  {          System.out.println("GrandPar ...