Generic View

GenericAPIVIew是所有的Generic View的基类,通过组合mixin来构建不同的Generic View。

GenericAPIVIew

属性

queryset

该属性不应该直接使用 否则该queryset在一次实例化后会cache数据 应该使用get_queryset方法

serializer_class

用于验证和逆序列化和序列化的serializer类 重载该属性或get_serializer_class方法

lookup_field

默认 pk

lookup_url_kwarg

默认和lookup_field相同

pagination_class

filter_backends

方法

get_querysest

get_object

    queryset = self.filter_queryset(self.get_queryset())
    lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
    obj = get_object_or_404(queryset, **filter_kwargs)
    self.check_object_permissions(self.request, obj)

filter_queryset

get_serializer get_serializer_class get_serializer_context

paginator get_paginated_response paginate_queryset

mixins

ListModeMixin

提供了list方法

    queryset = self.filter_queryset(self.get_queryset())
    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(queryset, many=True)
    return Response(serializer.data)

CreateModelMixin

提供了create方法

    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)

重载时可只重载perform_create,默认实现为调用serializer.save()

RetrieveModelMixin

提供了retrieve方法 单个对象返回

UpdateModelMixin

提供了update方法 partial_update方法 可以只重载perform_update方法

DestroyModelMixin

提供了destroy方法 可以只重载perform_destroy方法f

具体类

CreateAPIView(mixins.CreateModelMixin, GenericAPIView) post

ListAPIView(mixins.ListModelMixin, GenericAPIView) get

RetrieveAPIView(mixins.RetrieveModelMixin, GenericAPIView) get

DestroyAPIView(mixins.DestroyModelMixin, GenericAPIView) delete

UpdateAPIView(mixins.UpdateModelMixin, GenericAPIView)

put->update patch->partial_update

ListCreateAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView)

RetrieveUpdateAPIView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin,GenericAPIView)

RetrieveDestroyAPIView(mixins.RetrieveModelMixin, mixins.DestroyModelMixin, GenericAPIView)

RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, GenericAPIView)

源码实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容