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

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

  • 接口视图函数只返回Json类型给前端,然后把json数据交给js,让前端的js去处理html页面变化

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

DRF(Django rest_framework)(1序列化器部分)_第1张图片

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

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

DRF(Django rest_framework)(1序列化器部分)_第2张图片

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

删除方法delete:

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

查询所有方法get:

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

DRF(Django rest_framework)(1序列化器部分)_第3张图片

查看单个方法get:

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

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

DRF(Django rest_framework)(1序列化器部分)_第4张图片

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

添加方法post:

DRF(Django rest_framework)(1序列化器部分)_第5张图片

当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; 并且需要返回模型类对象,注意需要返回更新成功的模型类对象

DRF(Django rest_framework)(1序列化器部分)_第6张图片

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

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

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

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

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

DRF(Django rest_framework)(1序列化器部分)_第7张图片

你可能感兴趣的:(django,restful,python)