专栏首页python-爬虫drf框架中所有视图及用法

drf框架中所有视图及用法

0909自我总结

drf框架中所有视图及用法

一.drf框架中的所有视图类

from django.views import View

from rest_framework import views, generics, mixins, viewsets

  • 最基础:django自带的views类
  • drf框架中最基础的视图类:views.APIView
  • drf框架中工具视图:generics
    • GenericAPIView:该视图类中的基类
  • mixins视图工具集:
    • RetrieveModelMixin:retrieve 单取
    • ListModelMixin:list 群取
    • CreateModelMixin:create 单增
    • UpdateModelMixin:update 单整体改
    • UpdateModelMixin: partial_update 单局部改
    • DestroyModelMixin:destroy 单删
  • viewsets视图集

上述视图都是基于django自带的views进行相关方法的分装

二.viewsets视图集

ViewSetMixin:视图集工具 - 重写as_view - 将 请求方式 映射到视图类中的 指定方法
我们在路由中 类名.as_view({'get': 'retrieve', 'delete': 'remove_obj'})
GenericViewSet:与模型类有关的接口视图集 - 可以从mixins那继承功能,也可以自定义功能
ViewSet:与模型类无关或不是标准模型类接口 - 一般都是自定义功能

三.generics中GenericAPIView使用

将 queryset 和 serializer_class 封装成类属性,提供了三个方法

  • self.get_queryset() :获取所有
  • self.get_object() :获取根据pk获取单个
  • self.get_serializer(*args, **kwargs):获取指定 常用的几个参数
    • data:用于返序列化传参
    • many:获取多个序列化对象
    • instance:如果有后面save执行更新方法,没有执行创建方法
    • partial:为True可以进行局部字段修改,默认为False为所有字段修改

使用这些方法的重要前提必须要

  • queryset
  • serializer_class
  • 如果我们要使用get_object()必须前端传给我们一个pk

四.mixins使用

mixins是在generics再进行方法的分装成5个方法

  • RetrieveModelMixin:retrieve 单取
  • ListModelMixin:list 群取
  • CreateModelMixin:create 单增
  • UpdateModelMixin:update 单整体改
  • UpdateModelMixin: partial_update 单局部改
  • DestroyModelMixin:destroy 单删

使用方法都是self.方法名(request,*args,**kwargs)

如单取

首先我们要类进行继承class 类名(mixins.RetrieveModelMixin)

self.retrieve(request,*args,**kwargs)

不过再执行这些操作的时候依然要给与generics视图一样的两个参数,且创建的视图类必须继承其方法的类为父类

五.generics中继承GenericAPIView的子类使用

class BookRetrieveUpdateAPIView(generics.RetrieveUpdateAPIView):
    queryset = models.Book.objects.filter(is_delete=False).order_by('-id')
    serializer_class = serializers.BookModelSerializer

其实再之前的基础再进行方法的分装

居然有什么方法看源码即可ctrl+左键看源码

六自定制视图

本来get他就只会找类中get方法我们可以对其设置让他找我们对于的名称

路由层

from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^v4/books/(?P<pk>.*)/$', views.BookGenericViewSet.as_view({
        'delete': 'remove_book'
    })),
]

视图层

class BookGenericViewSet(mixins.RetrieveModelMixin, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
    queryset = models.Book.objects.filter(is_delete=False).order_by('-id')
    serializer_class = serializers.BookModelSerializer

    def remove_book(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        try:
            book_obj = models.Book.objects.get(is_delete=False, pk=pk)
            book_obj.is_delete = True
            book_obj.save()
            return APIResponse(0, '删除成功')
        except:
            return APIResponse(1, '删除失败')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA基础知识点(一)

    小小咸鱼YwY
  • linux配置SOCK5代理

    小小咸鱼YwY
  • 数据库的基础概念

    ​ 本质就是一套基于CS结构的 客户端和服务器程序,最终的数据存储在服务器端的磁盘中

    小小咸鱼YwY
  • 帮郭彦东博士转发小鹏汽车AI产品部技术交流会

    郭彦东博士是我的好朋友,前微软研究院研究员,小鹏汽车首席科学家。他找到我希望我帮忙转发一下小鹏汽车AI产品部的技术交流会。

    用户1564362
  • Laravel Ignition 功能全解析

    来源地址:https://freek.dev/1441-ignition-a-new-error-page-for-laravel

    Lemon黄
  • 网页音视频对讲音视频会议系统EasyRTC基于WebRTC编译过程中报错,如何解决?

    TSINGSEE青犀视频云-边-端架构中的EasyRTC视频会议系统是基于WebRTC来进行编译的。WebRTC是一个支持网页浏览器进行实时语音对话或视频对话的...

    EasyNVR
  • Cocoa编程中视图控制器与视图类详解

    iPhone编程规则是:一个窗口,多个视图。UIView是iPhone屏幕上很多控件的基础类。每个iPhone用户界面都是由显示在UIWindow(这其实也是个...

    猿人谷
  • 用航拍和地面观测数据,DeepMind AI可完成在陌生区域导航

    DeepMind的科学家们进行了相关研究,并在Arxiv.org上发表了一篇论文。

    大数据文摘
  • Bootstrap 响应式框架 第四集

    1、最外层 由nav并且引用 navbar navbar-default 两个类选择器来组成的

    李才哥
  • 使用Hadoop统计日志数据

    首先我们需要根据日志信息抽取出浏览器信息,针对不同的浏览器进行统计操作。虽然可以自己实现这个功能,但是懒得再造轮子了,所以我在GitHub找到了一个小工具可以完...

    端碗吹水

扫码关注云+社区

领取腾讯云代金券