序列化器的使用

DRF序列化使用

1-序列化和反序列化的流程说明

  • 序列化过程

    • 获取数据库中的数据对象所对应的字段数据—》转化为json返回前端从后端服务——》前端服务
  • 反序列化过程

    • 获取前端数据——》验证数据——》保存或更新数据获取新的数据对象从前端服务器——》后台服务器
  • DRF框架的功能:

    • Serializer序列化器

    • 视图

    • 认证,权限,限流,过滤,排序,分页,异常处理,自动生成接口文档

  • 在一个功能业务逻辑中可以包含序列化器和反序列化器

2-DRF的配置

  • 安装drf

    pip install djangorestframework
    
    
    
  • 注册应用rest_framework

3-序列化器中序列化过程的基本使用

定义Serializer
定义方法

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

**serializer不是只能为数据库模型类定义,也可以为非数据库模型类的数据定义。**serializer是独立于数据库之外的存在。

  • 序列化过程

    • 创建serializer.py文件
    • 继承serializers.Serializer创建类
    • 指定序列化器返回字段
    • 查询数据
    • 创建序列化器对象,传入查询集
    • JsonResponse()返回
  • 返回多个数据对象时

    • 序列化器对象创建时需写入关键字参数many = True

    • JsonResponse()中需要写入关键字参数safe = False

4-创建Serializer对象

定义好Serializer类后,就可以创建Serializer对象了。

Serializer的构造方法为:

Serializer(instance=None, data=empty, **kwarg)

说明:

1)用于序列化时,将模型类对象传入instance参数

2)用于反序列化时,将要被反序列化的数据传入data参数

3)除了instance和data参数外,在构造Serializer对象时,还可通过context参数额外添加数据,如

serializer = AccountSerializer(account, context={'request': request})

通过context参数附加的数据,可以通过Serializer对象的context属性获取。

5-序列化中的data方法的原理说明

  • data是一个方法,根据序列化器中接收到的查询集构造字典形式的数据

6-序列化中嵌套序列化的主表嵌套副表使用 `

  • 关联嵌套序列化器

    • PrimaryKeyRelatedField 此字段将被序列化为关联对象的主键

    • hbook = serializers.PrimaryKeyRelatedField(label='图书', read_only=True)
      
      
    • StringRelatedField 此字段将被序列化为关联对象的字符串表示方式(即__str__方法的返回值)

    • hbook = serializers.StringRelatedField(label='图书')
      
      
    • 使用关联对象的序列化器

    • hbook = BookInfoSerializer()
      
      
  • 如果是一对多形式需要使用 many=True

7-序列化中副表嵌套主表返回的使用

  • 调用形式与主表嵌套附表使用形式相同,但不需要使用many = True

  • 如果相互嵌套会发生错误(类似于死循环)

    • 解决办法,可重新定义新的序列化器,构造内容一致

8-序列化使用小结

  • 序列化返回时

    • 主表嵌套副表返回,属性名为副表的小写形式_set

    • 副表嵌套主表返回,属性名为关联外键

  • write_only = True只参与反序列化过程

  • read_only=True只参与序列化过程



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值