GenericAPIVIew是所有的Generic View的基類,通過組合mixin來構(gòu)建不同的Generic View酌心。
GenericAPIVIew
屬性
queryset
該屬性不應(yīng)該直接使用 否則該queryset在一次實例化后會cache數(shù)據(jù) 應(yīng)該使用get_queryset方法
serializer_class
用于驗證和逆序列化和序列化的serializer類 重載該屬性或get_serializer_class方法
lookup_field
默認(rèn) pk
lookup_url_kwarg
默認(rèn)和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墩崩,默認(rèn)實現(xiàn)為調(diào)用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