• GenericAPIView


    GenericAPIView

    此类扩展了REST框架的APIView类,为标准列表和详细信息视图添加了常用的行为。
    提供的每个具体通用视图都是通过将GenericAPIView与一个或多个mixin类组合而构建的。
    

    属性

    **基本设置:**
    以下属性控制基本视图行为。
    
    - queryset - 应该用于从此视图返回对象的查询集.  通常,您必须设置此属性,或覆盖get_queryset()方法。如果要覆盖视图方法,则必须调用get_queryset()而不是直接访问此属性,因为queryset将被评估一次,并且将为所有后续请求缓存这些结果。
    - serializer_class - 应该用于验证和反序列化输入以及序列化输出的序列化程序类。 通常,您必须设置此属性,或覆盖get_serializer_class()方法。
    - lookup_field - 应该用于执行单个模型实例的对象查找的模型字段。 默认为'pk'。 请注意,使用超链接API时,如果需要使用自定义值,则需要确保API视图和序列化程序类都设置查找字段。
    - lookup_url_kwarg - 应该用于对象查找的URL关键字参数。 URL conf应包含与此值对应的关键字参数。 如果未设置,则默认使用与lookup_field相同的值。
    
    **分页:**
     与列表视图一起使用时,以下属性用于控制分页。
    
    - pagination_clas - 分页列表结果时应使用的分页类。 默认为与DEFAULT_PAGINATION_CLASS设置相同的值,即'rest_framework.pagination.PageNumberPagination'。 设置pagination_class = None将禁用此视图上的分页。
    
    **过滤:**
    
    - filter_backends - 应该用于过滤查询集的过滤器后端类列表。默认值与DEFAULT_FILTER_BACKENDS设置的值相同。
    

    类方法

    [get_queryset(self)]

    返回应该用于列表视图的查询集,该查询集应该用作详细视图中查找的基础。默认返回queryset属性指定的查询集。
    应始终使用此方法而不是直接访问self.queryset,因为self.queryset仅被评估一次,并且这些结果将被缓存用于所有后续请求。
    
    可以重写以提供动态行为,例如返回查询集,该查询集特定于发出请求的用户。
    
    ```
        def get_queryset(self):
            assert self.queryset is not None, (
            "'%s' should either include a `queryset` attribute, "
            "or override the `get_queryset()` method."
            % self.__class__.__name__
            )
    
            queryset = self.queryset
            if isinstance(queryset, QuerySet):
                # Ensure queryset is re-evaluated on each request.
                queryset = queryset.all()
            return queryset
    
    ```
    

    [get_object(self)]

    返回应该用于详细视图的对象实例。 默认使用lookup_field参数来过滤基本查询集。
    
    可以重写以提供更复杂的行为,例如基于多个URL kwarg的对象查找。
    
    ```
    def get_object(self):
        queryset = self.filter_queryset(self.get_queryset())
    
            # Perform the lookup filtering.
            lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
            filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
            obj = get_object_or_404(queryset, **filter_kwargs)
    
            # May raise a permission denied
            self.check_object_permissions(self.request, obj)
    
            return obj
            
    ```
    
    请注意,如果您的API不包含任何对象级别权限,您可以选择性地排除self.check_object_permissions,并简单地从get_object_or_404查找返回该对象。
    

    [filter_queryset(self, queryset)]

    给定一个查询集,使用正在使用的任何过滤后端过滤它,返回一个新的查询集。
    例如:
    
    ```
    def filter_queryset(self, queryset):
    	filter_backends = (CategoryFilter,)
    
    	if 'geo_route' in self.request.query_params:
    		filter_backends = (GeoRouteFilter, CategoryFilter)
    	elif 'geo_point' in self.request.query_params:
    		filter_backends = (GeoPointFilter, CategoryFilter)
    
    	for backend in list(filter_backends):
    		queryset = backend().filter_queryset(self.request, queryset, view=self)
    
    	return queryset
    ```
    

    [get_serializer_class(self)]

    返回应该用于序列化程序的类。 默认返回serializer_class属性。	可以重写以提供动态行为,例如使用不同的序列化程序进行读写操作,
        或者为不同类型的用户提供不同的序列化程序。
    
        def get_serializer_class(self):
            return self.serializer_class
    

    子类处理增删改查

    class ListAPIView(mixins.ListModelMixin,
                  GenericAPIView):
    
    class RetrieveAPIView(mixins.RetrieveModelMixin,
                      GenericAPIView):
    
    class DestroyAPIView(mixins.DestroyModelMixin,
                     GenericAPIView):
    
    class UpdateAPIView(mixins.UpdateModelMixin,
                    GenericAPIView):
    

    class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
                                   mixins.UpdateModelMixin,
                                   mixins.DestroyModelMixin,
                                   GenericAPIView):
        
        #Concrete view for retrieving, updating or deleting a model instance.
        
        def get(self, request, *args, **kwargs):
            return self.retrieve(request, *args, **kwargs)
    
        def put(self, request, *args, **kwargs):
            return self.update(request, *args, **kwargs)
    
        def patch(self, request, *args, **kwargs):
            return self.partial_update(request, *args, **kwargs)
    
        def delete(self, request, *args, **kwargs):
            return self.destroy(request, *args, **kwargs)
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    11、sqlite
    10、正则
    9、bs4
    8、异常与import
    7、文件
    6、函数
    4、字典及集合
    3、元组
    1、python基本语法
    shell编程 15 --- shell 脚本调试技巧
  • 原文地址:https://www.cnblogs.com/daviddd/p/11918959.html
Copyright © 2020-2023  润新知