笔记:Serializer序列化器

1,序列化器的作用:

DRF框架是基于Django框架的.而DRF Serializer序列化器可以实现接口开发的高度复用.

  • 1,进行数据的校验
  • 2,对数据对象进行转换

1,定义Serializer

Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer
注意:serializer不是只能为数据库模型类定义,也可以为非数据库模型类的数据定义。serializer是独立于数据库之外的存在
字段与选项
常用字段有:BooleanField CharField IntegerField …
选项参数:max_length min_lenght max_value …
通用参数:read_only write_only required default allow_null validators error_messages label help_text
创建Serializer对象
定义好Serializer类后,就可以创建Serializer对象了
Serializer(instance=None, data=empty, **kwarg)

2,序列化的使用

先查询出一个图书对象

book = BookInfo.objects.get(id=2)

构造序列化器对象

serializer = BookInfoSerializer(book)

获取序列化数据
通过data属性可以获取序列化后的数据 serializer.data
如果要被序列化的是包含多条数据的查询集QuerySet,可以通过添加many=True参数补充说明

关联对象嵌套序列化
如果需要序列化的数据中包含有其他关联对象,则对关联对象数据的序列化需要指明
对于关联字段,可以采用以下几种方式:
1) PrimaryKeyRelatedField 此字段将被序列化为关联对象的主键
2) StringRelatedField 此字段将被序列化为关联对象的字符串表示方式(即__str__方法的返回值)
3)使用关联对象的序列化器 hbook = BookInfoSerializer()

many参数
如果关联的对象数据不是只有一个,而是包含多个数据,如想序列化图书BookInfo数据,每个BookInfo对象关联的英雄HeroInfo对象可能有多个,此时关联字段类型的指明仍可使用上述几种方式,只是在声明关联字段时,多补充一个many=True参数即可

3,反序列化的使用

1,验证:(类型验证,属性验证)使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象
在获取反序列化的数据前,必须调用is_valid()方法进行验证,验证成功返回True,否则返回False。
验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误。如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。
验证成功,可以通过序列化器对象的validated_data属性获取数据
在定义序列化器时,指明每个字段的序列化类型和选项参数,本身就是一种验证行为

方法验证:
单一字段验证方法:
1)validate_<field_name> 对<field_name>字段进行验证

def validate_btitle(self, value):if 'django' not in value.lower():raise serializers.ValidationError("图书不是关于Django的")     (要点1)return value           (要点2)

多个字段验证方法:
在序列化器中需要同时对多个字段进行比较验证时,可以定义validate方法来验证
2)validate

def validate(self, attrs):bread = attrs['bread']bcomment = attrs['bcomment']if bread < bcomment:raise serializers.ValidationError('阅读量小于评论量')return attrs

3)validators 在字段中添加validators选项参数,也可以补充验证行为
btitle = serializers.CharField(label=‘名称’, max_length=20, validators=[about_django])
about_django是在外面定义的一个方法,
2.保存
如果在验证成功后,想要基于validated_data完成数据对象的创建,可以通过实现create()和update()两个方法来实现。
ser.save()是序列化器对象的save方法
instance.save()是模型类对象方法
实现了上述两个方法后,在反序列化数据的时候,就可以通过save()方法返回一个数据对象实例了
如果创建序列化器对象的时候,没有传递instance实例,则调用save()方法的时候,create()被调用,相反,如果传递了instance实例,则调用save()方法的时候,update()被调用。
新建: def create(self, validated_data):
更新: def update(self, instance, validated_data):

4,模型类序列化器ModelSerializer

如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。
ModelSerializer与常规的Serializer相同,但提供了:
基于模型类自动生成一系列字段
基于模型类自动为Serializer生成validators
包含默认的create()和update()的实现

1,定义
2,指定字段
使用fields来明确字段
使用exclude来明确排除掉哪些字段
默认ModelSerializer使用主键作为关联字段,可以使用depth来简单的生成嵌套表示,depth应该是整数,表明嵌套的层级数量
显示指明字段
指明只读只读 通过read_only_fields指明只读字段,即仅用于序列化输出的字段
3,添加额外参数
可以使用extra_kwargs参数为ModelSerializer添加或修改原有的选项参数

DRF Serializer序列化器使用相关推荐

  1. Andriod:serializer序列化器生成xml文件

    serializer序列化器生成xml文件 目录 serializer序列化器生成xml文件 一.目录结构 二.类MainActivity 三.类:SMS 四.activity_main.xml 一. ...

  2. 定义Serializer序列化器

    序列化器的作用: 进行数据的校验 对数据对象进行转换 定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_fra ...

  3. DRF框架—序列化器中的字段校验规则

    一.怎么校验创建的项目名是否是唯一的,当项目名name字段不唯一,怎么设置提示信息? 方法:导入UniqueValidator from rest_framework.validators impor ...

  4. Serializer序列化器使用

    定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializ ...

  5. 快速上手Django(六) -Django之Django drf 序列化器Serializer类

    文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...

  6. Django REST Framework教程(4): 玩转序列化器(Serializer)

    在前面的文章中我们以博客为例,自定义了一个简单的 ArticleSerializer 类, 并分别以函数视图(FBV)和基于类的视图(CBV)编写了博客文章列表资源和单篇文章资源的API,支持客户端以 ...

  7. Django 基础(13)-Django drf 序列化器类to_representation和to_internal_value(处理返回的日期格式)、序列化类 ModelSerializer

    文章目录 一.Django drf 序列化 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSerializer 5. DRF序列化器to_representatio ...

  8. 谈谈Django REST Framework(DRF)中的序列化器

    摘要 Django REST Framework(DRF)是一个强大的工具,可以帮助我们构建和处理RESTful API.其中的序列化器(Serializers)是其核心组件之一,它允许我们快速有效地 ...

  9. 20-Django REST framework-Serializer序列化器

    Serializer序列化器 前言 序列化器作用 定义Serializer 定义方法 字段与选项 创建Serializer对象 序列化使用 基本使用 增加额外字段 关联对象序列化 反序列使用 模型类序 ...

  10. drf序列化器-Serializer

    Python之drf序列化器-Serializer 一.序列化器-Serializer的作用 序列化,序列化器会将模型类对象转化为字典,经过Response变成json字符串 反序列化,把客户发送过来 ...

最新文章

  1. Asp.net 中 OnClientClick 与 OnClick 的执行顺序
  2. java高并发(二十一)高并发场景下缓存常见问题
  3. how do you usually upload picture in SCN A workaround for current SCN upload is
  4. 企业数字化转型解决方案
  5. oracle 10g分区表,oracle10g-11gR2 分区表汇总一
  6. redis key失效的事件_Redis常见、常用的知识点
  7. 区块链 Zilliqa是什么
  8. sqluldr2 用法简述
  9. Docker玩转Rhadoop
  10. 《机器学习实战(第二版)》学习记录
  11. eclipse svn插件下载地址
  12. Axure RP 7.0 注册码
  13. 【安全资讯】关键信息基础设施安全保护条例,自2021年9月1日起施行
  14. 趣店PHP面经_腾讯助理PHP开发工程师外包岗面经
  15. 数字IC后端工程师应该如何快速入门提高工作技能?
  16. Django创建APP
  17. Host文件是什么?host文件有什么作用?
  18. 朴素贝叶斯法 - 垃圾邮件分类
  19. 壁纸搜索系统/壁纸管理系统的设计与实现
  20. Excel导出带图片详解

热门文章

  1. 谁更胜一筹?技德Remix VS 凤凰OS
  2. zip和rar压缩文件的区别
  3. multisim的汉化
  4. 32款 jQuery UI框架开源软件
  5. 程序员背锅救星-docker
  6. 微弱信号检测_第二版-高晋占
  7. 编译原理实验二 语法分析程序设计与实现
  8. 直立车控制之PID算法分析
  9. iec61508最新2020_什么是IEC 61508?
  10. c语言c11标准 下载,【整理】C语言的各种版本:C89,AMD1,C99,C11