drf代码简化的演变过程

APIview的正常书写 

1.序列化类的书写 这里用modelserlizer 可以不用重写update和create方法

2.在视图层函数拿到原数据即 model.Book.bojects.xxxx 类实例化原数据 (instance=book,data=request.data)

3.return Response即可

一级进化

仅GenericAPIView
两个重要参数
queryset = models.Book.objects.all()
serializer_class = ser.BookModelSerializer
然后 拿所有数据就是 self.get_queryset()
拿单个数据就是 self.get_object()
序列化数据都是 self.get_serializer() 针对单个数据与多条数据是否要配置 many=True的区别罢了


二级进化
from rest_framework.mixins import ListModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin
重要的数据只有
queryset = models.Book.objects.all()
serializer_class = ser.BookModelSerializer
然后针对不同的请求定义不同方法然后返回不同方法而以
get 对应返回 self.list(request) self.retrieve(request,pk) 全部和单个
put 对应返回 self.update(request,pk)
delete 对应返回 self.destroy(requsest,pk)
post 对应返回 self.create(request)

三级进化
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
两个视图函数只需要写
queryset = models.Book.objects.all()
serializer_class = ser.BookModelSerializer
终极进化
from rest_framework.viewsets import ModelViewSet

一个视图函数即可 在路由匹配时添加actions参数即可{'get':'lsit'}{'get':'retrieve'}
 


上一篇:从DER ASN.1到XMLDSIG P1363的PHP DSA签名转换


下一篇:使用QuerySet删除和查询单表