zoukankan      html  css  js  c++  java
  • DRF的视图组件

    DRF的视图组件

    DRF的视图组件大概分以下几类

    两大视图类

    • APIView、GenericAPIView
    from rest_framework.views import APIView
    from rest_framework.generics import GenericAPIView
    	'''
    	APIView继承Django的View
    	   1) View:将请求方式与视图类的同名方法建立映射,完成请求响应
    	   2) APView:除了拥有View的功能之外,还有一些独有的功能
    			View的功能;
    	   		重写as_view禁用csrf认证;
    	   		重写dispatch:请求、响应、渲染、异常、解析、三大认证
    	   		多了一堆类属性,可以完成视图类的局部配置
    	'''
    
    # GenericAPIView提供了三个方法:get_object()、get_queryset()、get_serializer()
    
    from rest_framework.generics import GenericAPIView
    class StudentGenericAPIView(GenericAPIView):
        queryset = models.Student.objects.all()		# 取到所有的学生对象,取到的是一个queryset对象,其实用这些工具我们至少都要定义一个queryset和一个serializer_class
        serializer_class = serializers.StudentModelSerializer		# 
    
        def get(self, request, *args, **kwargs):
            stu_query = self.get_queryset()
            stu_ser = self.get_serializer(stu_query, many=True)
            return Response(stu_ser.data)
    

    六大视图工具类

    • RetrieveModelMixin, ListModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin五大工具类

    • 六大工具方法:retrieve、list、create、update、partial_update、destroy

    •   from rest_framework import mixins 
        
      

    class StudentMixinGenericAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):
    queryset = models.Student.objects.all()
    serializer_class = serializers.StudentModelSerializer

        def get(self, request, *args, **kwargs):
            return self.list(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs):
            return self.create(request, *args, **kwargs)
    ```
    

    九大工具视图类

    • CreateAPIView, DestroyAPIView, ListAPIView, ListCreateAPIView, RetrieveAPIView, RetrieveDestroyAPIView, RetrieveUpdateAPIView, RetrieveUpdateDestroyAPIView, UpdateAPIView

    •   from rest_framework.generics import CreateAPIView, RetrieveAPIView, ListAPIView, UpdateAPIView, DestroyAPIView
        
      
        class StudentMixinAPIView(CreateAPIView, RetrieveAPIView, ListAPIView, UpdateAPIView, DestroyAPIView):
            queryset = models.Student.objects.all()
            serializer_class = serializers.StudentModelSerializer
            # url中单查,不一定必须提供主键,下面的定义就是提供一个供查询的唯一键的字段名即可,当然,需要时表中有的字段,或者是外键字段
            lookup_url_kwarg = 'id'
        
            # 有删除需求的接口继承DestroyAPIView,重写destroy完成字段删除,但其实这个方法没有太大必要,因为这种删除需求会彻底在库中删除数据,而在生产中我们一般只会给is_delet字段修改值而已,所以不需要这个方法,重写的时候只需要修改is_delete字段就好
            def destroy(self, request, *args, **kwargs):
                pass
        
      

    两大视图集基类

    • ViewSet, GenerivViewSet

    •   from rest_framework.viewsets import ModelViewSet
        # 实际上ModelViewSet的源码里面是这么定义的,就是直接继承的mixins(视图工具类)里面的各种方法,几乎包含了所有的方法,除此之外还有一个仅用只读的Model视图集,名为ReadOnlyModelViewSet,
      

    class ModelViewSet(mixins.CreateModelMixin,
    mixins.RetrieveModelMixin,
    mixins.UpdateModelMixin,
    mixins.DestroyModelMixin,
    mixins.ListModelMixin,
    GenericViewSet):
    pass
    # 该类只继承了单查和群查,所以
    class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,
    mixins.ListModelMixin,
    GenericViewSet):
    pass

    # 而两大大视图集基类均是继承自ViewSetMixin
    class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
        '''
        可以自定义映射关系的GenericAPIView
        
        '''
    	pass
    class ViewSet(ViewSetMixin, views.APIView):
        '''
        可以自定义映射关系的APIView
        '''
    	pass
    '''
    ViewSetMixin所完成的主要功能就是重写as_view()和view(),从而在url里面可以这样写映射关系,比如
    as_view({
    	'get':'my_get',
    	'post':'my_post',
    	
    	})
    	这样映射关系写过之后,前端发来的url的类型get和post就会映射到视图层的my_get和my_post,这两个方法都是写在View.py的响应方法里面
    '''
    ```
  • 相关阅读:
    (引)spring学习笔记1.什么是控制反转
    Arduino 各种模块篇 步进电机 step motor 舵机 servo 直流电机 总复习
    Raspberry Pi Wireless Adaptor
    Pyramid 使用总结1
    Arduino 各种模块篇 人体红外感应模块 proximity sensor
    Pyramid 使用总结2
    Webcam Streaming Desktop Recording on Linux for ubuntu or its destros
    Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
    Arduino 各种模块篇 motor shield 电机扩展板(舵机、直流电机、步进电机party)
    转载 stepper motors
  • 原文地址:https://www.cnblogs.com/Xu-PR/p/11937799.html
Copyright © 2011-2022 走看看