DRF-五个拓展类及使用、拓展类子类

一、五个拓展类(配合GenericAPIView)继承自object,这五个拓展类里都对应的封装好了相应的功能,我们只需要调用里面的方法就可以了

ListModelMixin:获取多个数据对象

CreateModelMixin:保存数据

RetrieveModelMixin:获取单一数据对象

UpdateModelMixin:更新数据

DestroyModelMixin:删除数据。

这五个拓展类是配合GenericAPIView使用的

所以还是用GenericaAPIView的视图类代码,这个时候就应该导入

这些拓展类为什么要和GenericaAPIView 一块使用呢,点ListModelMixin源码看一下。

发现里面的list方法里调用了get_serializer方法,这个方法是Generica提供的,所以要和GenericaAPIView配合使用。

代码如下:

from django.shortcuts import render
from testdjango.models import BookInfo
from book_drf.serializer import BookSerializer

from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin, CreateModelMixin, \
    RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
from rest_framework.request import Request
from rest_framework.response import Response


class Books(GenericAPIView, ListModelMixin, CreateModelMixin):
    queryset = BookInfo.objects.all()   # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer   # 指定当前类视图使用的序列化器

    def get(self, request):
        # 调用ListModelMixin里的list方法就可以了,把request传进去
        return self.list(request)

    def post(self, request):
        # 调用CreateModelMixin里的create方法
        return self.create(request)


class Book(GenericAPIView, RetrieveModelMixin):
    queryset = BookInfo.objects.all()  # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer  # 指定当前类视图使用的序列化器

    def get(self, request, pk):
        return self.retrieve(request, pk)


class BookDRFView(GenericAPIView, UpdateModelMixin, DestroyModelMixin):
    queryset = BookInfo.objects.all()  # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer  # 指定当前类视图使用的序列化器

    def put(self, request, pk):
        return self.update(request, pk)

    def delete(self, request, pk):
        return self.destroy(request, pk)

二、拓展类子类从上图可以看出总共有九个,分别是

ListCreateAPIView、

ListAPIView、

CreateAPIView、

DestroyAPIView、

RetrieveDestroyAPIView、

RetrieveAPIView、

RetrieveUpdateDestroyAPIView、

RetrieveUpdateAPIView、

UpdateAPIView

可以看出这些子类是几个拓展类的复合,所以获取所有数据和保存数据就可以直接用这个拓展类子类ListCreateAPIView。删除数据、更新数据,可以直接用这个子类RetrieveUpdateDestroyAPIView。

点进去 ListCreateAPIView,可以从源码中看出,这个子类已经实现了 get 和post方法。

点进去 RetrieveUpdateDestroyAPIView,可以看出子类已经实现了更新和删除 获取单一数据方法

 

那么修改后的代码如下:

from django.shortcuts import render
from testdjango.models import BookInfo
from book_drf.serializer import BookSerializer

from rest_framework.generics import GenericAPIView, ListCreateAPIView, RetrieveUpdateDestroyAPIView, \
    RetrieveAPIView
from rest_framework.mixins import ListModelMixin, CreateModelMixin, \
    RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
from rest_framework.request import Request
from rest_framework.response import Response


class Books(ListCreateAPIView):
    queryset = BookInfo.objects.all()   # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer   # 指定当前类视图使用的序列化器


class Book(RetrieveAPIView):
    queryset = BookInfo.objects.all()  # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer  # 指定当前类视图使用的序列化器


class BookDRFView(RetrieveUpdateDestroyAPIView):
    queryset = BookInfo.objects.all()  # 指定当前类视图使用的查询集数据
    serializer_class = BookSerializer  # 指定当前类视图使用的序列化器

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值