DRF(Django rest_framework)(1序列化器部分)

简介:restful restful就是一个接口的规范,也就是面向资源的url

  • 接口视图函数只返回Json类型给前端,然后把json数据交给js,让前端的js去处理html页面变化
  • 序列化器是什么呢,就是一个drf中封装了django orm的东西,用来序列化地返回和存储模型字段,也可以动态地添加非模型字段

1.序列化器

序列化要传参instance(传模型类对象),反序列化要传参data(传request中的数据)

因为是增删改查查,所以一个View不能有两个get方法,那么就分开两个视图类

一个放不需要传id的BookView, 一个放需要传id的BookDetailView,这样url中正则带id的参数和不带id的也就都分开了

导包:

from rest_framework.views import APIView

from rest_framework import serializers

from rest_framework.response import Response

1.1针对模型设置序列化器,继承原生的serializers.Serializer的序列化器

序列化器可以和view试图放在一起但是,为了解耦,最后都会单独放一块;这之中的字段名必须和模型类中的字段名相同,否则走不通,并且,is_valid()方法就是在检查serializer的这些个字段中的要求进行检验,但是有可能会和模型类中的要求起冲突,这点注意!

这五个中不需要用到serializer.save()的方法

删除方法delete:

直接找到模型类对象进行删除即可,直接返回空即可

查询所有方法get:

先用.all()查出query_set再构建序列化器对象

查看单个方法get:

就用objects.get(pk=id)得到模型类对象

赋给序列化器的instance,再用其序列化结果serializer.data返回就可以了

需要用到serializer.save()的方法

添加方法post:

当serializer.is_valid()是True,执行serializer.save()的时候,会执行序列化器类中的create()函数,该函数需要被实现,create的参数是self和validated_date;并且需要返回更新后的,模型类对象

更新方法put:

注意实例化put方法的序列化器时,instance和data都需要传,因为需要知道传什么,还需要知道向谁传参

当serializer.is_valid()是True,执行serializer.save()的时候,会执行序列化器类中的update()函数,该函数需要被实现,update的参数是instance、validated_data; 并且需要返回模型类对象,注意需要返回更新成功的模型类对象

1.2基于模型类来创建序列化器,继承serializer.ModelSerializer的序列化器

用 Meta来绑定配置模型类,这样就不需要手动地的在序列化器中写Book.objects等来查询了

并且定义了create、update方法(说明自动return),且覆盖率一对一,一对多的情况。

且试图函数一行都不用改,同时还能选择字段和自己重写重定义字段,关键字是source='原字段'

如图中就是将pub_date重写之后再将原来的pub_date排除 

1.3 动态添加字段

如果是要在某个列表下加字段显示,但是该字段不是标准的模型类中的,而是需要别的来源,则需要在序列化器中进行字段拼接:序列化器中的to_representation函数就是控制序列化返回的东西,这个方法是由ModelSerializer提供的,可以在继承ModelSerializer的自定义序列化器中,重写这个方法,在重写的看到要先调用ModelSerializer中的to_representation函数将标准的模型类中的数据查询到,再进行字段的拼接。如图:

ret中的字段就是返回的字段了,在得到模型类的标准ret后,就可以动态地向ret中添加字段了

,函数get_analysis_status(ret),就是在进行字段的拼接:

不难看出,序列化器中的自定义方法是要写成类方法;下面的函数就是通过查询redis和victoria metrics (一种tsdb)来进行逻辑判断和字段的写入

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值