drf之序列化器

1.DRF框架定义的序列化流程
1.狭义上的序列化定义

数据流向:后端到前段

后端负责处理数据处理流程:

模型类对象–》字典–》json字符串(DRF约定的序列化流程)

1.通过Django模型类获取数据库数据构建模型类对象

2.把模型类对象转化为字典

3.把字典转化为json格式的字符串

2.DRF框架的反序列化流程

数据流向:前段到后端

json字符串–>字典–>数据校验(产生有效数据)–>模型类对象(新建,更新)

二进制转化为字符串再转化为json字符串

字符串转化为字典

数据校验

模型类对象

数据库增删改查中的DRF约定的序列化和反序列化业务

查询(序列化):模型类对象–>字典–>json字符串

新增(反序列化):json字符串–>字典–>数据校验–>有效数据–>新建模型对象

更新(反序列化):json字符串–>字典–>数据校验–>有效数据–>更新模型对象

删除(规定为反序列化):根据路径pk删除模型类对象

2.广义上的序列化定义

定义:相同的数据在不同类型(表现形式)之间的转化,称之为序列化,反序列化是与序列化相对的过程:序列化是一个过程,中间可能经过多层转化(我们往往最主要关注的是首尾)

a = {"name":"yangyadong", "age":18}
a:类型是字典,值(记录的数据)是一个人的信息(键值对)
b = '{"name":"yangyadong", "age":18}'
b:类型是字符串(json格式),
import json
b = json.dumps(a)
a = json.loads(b)

c = [("name","yangyadong"), ("age",18)]
c :列表嵌套元组(元组恒定2个元素)
a = dict(c)
c-->a:遍历
字典,列表,字符串,元组,集合,json字符串

序列化器(Serializer)

定义:用来执行序列化/反序列化操作的一个工具

对象:操作模型类

作用:

功能;

  1. 序列化:模型类对象–》使用序列化器–>字典—>Json字符串
  2. 反序列化器:Json字符串–>字典–>交给序列化器–>有效数据–>新建/更新模型类
  3. 模型类隐藏字段也可以映射,只要模型类有的字段都可以映射
2.序列化器的定义
3.序列化器之序列化操作
3.2关联嵌套序列化

两大方向,三种形式

方向一:序列化主表数据的时候顺带着序列化关联从表多个数据;

方向二:序列化从表数据的时候,顺带着序列化关联总表多个数据;

形式一:关联字段的类型定义成:PrimaryKeyRelatedField(queryset,many)

  • queryset=锻炼模型类的查询集 # 作用域反序列化
  • many=True表示表示关联字段是多个对象的时候设置的(关联字段是从表多条数据)

形式二:StringRelatedField:把关联对象

4.序列化器之反序列化操作
4.1 反序列化操作值标准校验流程
4.2反序列化操作之标准新建/更新流程

在子应用里创建serializers.py

from rest_framework import serializers
# 1. 定义BookInfo模型类的序列化器
class BookInfoSerializers(serializers, Serializer):
	# 2. 通过定义模型类,同名类属性,类型一一对应的形式,来指定参与序列化的字段,决定序列化结果(字典)有哪些字段
	btitle = serializers.CharField()
	bpub_date = serializers.DateField()
    bread = serializers.IntegerField()
    is_delete = serializers.BooleanField()
    image = serializers.ImageField()

标准序列化流程

  • 获取目标数据(一个或者多个模型类对象)

  • 实例化序列化器对象

    • 单一对象序列化:BookInfoSerializer(instance = book)
    • 多个对象序列化:BookInfoSerializer(instance = books, many = True)
  • 序列化结果

    • 单一对象序列化结果(dict):bs.data
    • 多个对象序列化结果(OrderedDict):bs.data

序列化单一对象

  1. 获取目标数据(被序列化操作的模型类对象,一个或者多个)

  2. 实例化序列化器对象

  3. 获取序列化的结果

   python3 manage.py shell
   
   from  Books.models  import *
   
   from Book.serializers import *
   
   book = BookInfo.objects.all()[0]
   
   bs = BookInfoSerializer(instance = book)
   
   bs.data

序列化多个对象

python3 manage.py shell

from  Books.models  import BookInfoSerializers

#1. 获取目标数据(被序列化操作的模型类对象,一个或者多个)

books = BookInfo.objects.all()

books

#2.实例化序列化器对象(传入目标数据)

bs = BookInfoSerializer(instance = books, many = True)

#3.获取序列化的结果

bs.data
b1 = bs.data[0]
b1
b1.get('title')

模型类三大属性:ID(主键)

id = serializers.IntegerField()

related_named定义一个主表隐藏字段为heros

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值