• 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, '删除失败')
    
  • 相关阅读:
    mysql:添加索引
    mysql: update字段中带select
    ASP.NET Web API 2 入门
    notify()、notifyAll()和wait()
    Mybatis3 框架理解
    项目中用到的Java注解
    使用webservice实现App与服务器端数据交互
    IntelliJ idea 14 集成 tomcat 7
    使用adb签名并安装Android程序
    写了一个月的单元测试,总算明白大学里这门课白学了
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11491625.html
Copyright © 2020-2023  润新知