DRF序列化器 get_<字段名> validate_<字段名>

DRF序列化器 get_<字段名> validate_<字段名>

1. drf序列化 反序列化定义

        序列化:python后端 -> 前端  python对象转成json对象

        反序列化:前端数据 -> python后端  json/form-data 转成python数据库对象保存

2. get_<字段名> validate_<字段名>的差异

        get_<字段名> 一般用于”序列化“过程,且多为read_only,get_Field(self, instance) 中参数instance是serializer中的model实例(单个),本质上get_Field是回调钩子函数,DRF会根据对象个数遍历然后调用get_函数。下图说明get_函数是回调钩子函数,DRF自动调用(每个单个实例对象)

        validate_<字段名> 一般用于”反序列化“过程,校验前端传过来的数据!同理,valiate_函数是局部钩子函数,同get_Field一样传入的是单个实例的字段值(指定),若是validate全局钩子函数,参数attrs则是单个实例的所有字段json

        注意:默认情况下,modelserializer不会自动生成每个model的字段的get_方法,但是自己写的时候都是需要重新生成新字段给前端,才会创建;对于validate_方法同样如此,用于反序列化过程!

        get_<字段名>(self, instance),instance其实就是model类;

        序列化器中:fields一般是默认model中的字段名,如果再自定义字段名,需要使用get_<字段名>,这个主要是序列化过程;反序列化没有自定义字段!fileds是反序列化、序列化2个过程;而filter中的fileds只是从前端往后端传,用来filter的。

        序列化中:serializer.data用于获取序列化后的数据!

3. 注意

        入门时,可以先不纠结底层源码实现,需要覆盖对应函数时,也是比较浅显的一层,简简单单的用就可以,不用太纠结源码,先熟练使用,人家框架就是这么设计的。然后如果想提升自己,等熟练后,再专门学习代码设计、设计模式、特性!

4.其他

        serializer和viewset之间互享request,drf已经设置了,但是实际应用中,serializer不止1个,那么serializer就不能全部都可以获取request,所以需要显式传入(在serilizer定义中)

        

        

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值