zoukankan      html  css  js  c++  java
  • 视图家族

    视图家族

    **1.View: **

    1. 将请求方式与视图类的同名方法建立映射,完成请求响应

    2.APIView

    1. 拥有View的所有功能
    2. 重写as_view禁用csrf认证
    3. 重写dispatch: 请求、响应、渲染、异常、解析、三个认证
    4. 多了一堆类属性,可以完成试图类地局部配置
    eg:
    	class StudentAPIView(APIView):
            def get(self, request, *args, **kwargs):
            
                stu_query = models.Student.objects.all()
                stu_ser = serializers.StudentModelSerializer(stu_query, many=True)
                
                return Response(stu_ser.data)
    

    3.GenericAPIView:

    1. 拥有APIView的所有功能
    2. 三个方法: get_object()、get_queryset()、get_serializer()
    3. 三个属性: queryset、serializer_class、lookup_url_kwargs
    eg:
    	class StudentGenericAPIView(GenericAPIView):
            queryset = models.Student.objects.all()
            serializer_class = serializers.StudentModelSerializer
            
            def get(self, request, *args, **kwargs):
            
                # stu_query = models.Student.objects.all()
                stu_query = self.get_queryset()
                
                # stu_ser = serializers.StudentModelSerializer(stu_query, many=True)
                stu_ser = self.get_serializer(stu_query, many=True)
                
                return Response(stu_ser.data)
    
    	
    

    4.mixins包:

    1. 五大工具类: RetrieveModelMinxin , ListModelMixin , CreateModelMixin , UpdateModelMixin,
    2. 六大工具方法: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)
    

    5.generics包:

    1. 一堆mixins工具类与GenericAPIView视图基类组合
    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完成字段删除
        def destroy(self, request, *args, **kwargs):
            pass
    
    

    6.ViewSetMixin

    1. 重写as_view(), 完成请求方式与视图方法的自定义映射
    2. 例子: as_view({'get': 'my_get'})
    # 视图集
    from rest_framework.viewsets import ModelViewSet
    class StudentModelViewSet(ModelViewSet):
        queryset = models.Student.objects.all()
        serializer_class = serializers.StudentModelSerializer
    
        def my_post(self, request, *args, **kwargs):
            return Response('my post ok')  # 需要在url中做映射
    
    

    7.视图集基类:

    1. ViewSet(ViewSetMixin, APIView): 可以自定义映射关系的APIView
    2. GeneriViewSet(ViewSetMixin, GenericAPIView): 可以自定义映射关系的GenericAPIView

    8.常用Model视图集

    1. ModelViewSet(mixins.CreateModelMixin,
      mixins.RetrieveModelMixin,
      mixins.UpdateModelMixin,
      mixins.DestroyModelMixin,
      mixins.ListModelMixin,
      GenericViewSet)
      (某一资源的六大操作视图集)

    2. ReadOnlyModelViewSet(mixins.RetrieveModelMixin,
      mixins.ListModelMixin,
      GenericViewSet)
      (某一资源的只读操作视图集)

  • 相关阅读:
    20200226 Java IO流——廖雪峰
    20200225 Java 多线程(2)-廖雪峰
    20200225 Java 多线程(1)-廖雪峰
    20200224 尚硅谷ElasticSearch【归档】
    20200224 一 概述
    20200222 尚硅谷Dubbo【归档】
    20200222 四、dubbo原理
    Improved robustness of reinforcement learning policies upon conversion to spiking neuronal network platforms applied to Atari Breakout game
    Reinforcement learning in populations of spiking neurons
    Solving the Distal Reward Problem through Linkage of STDP and Dopamine Signaling
  • 原文地址:https://www.cnblogs.com/kangwy/p/11953920.html
Copyright © 2011-2022 走看看