Вы можете использовать ViewSets.
class BookApiViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
authentication_classes = (JSONWebTokenAuthentication, )
permission_classes = (IsAuthenticated, IsNotBlacklistedUser)
filter_backends = (filters_django.DjangoFilterBackend,)
filter_fields = ('title',)
или универсальные APIViews
class BookListCreateAPIView(generics.ListCreateAPIView):
authentication_classes = (JSONWebTokenAuthentication, )
permission_classes = (IsAuthenticated, IsNotBlacklistedUser)
filter_backends = (filters_django.DjangoFilterBackend,)
filter_fields = ('title',)
, или вы можете расширить GenericAPIView и писать фильтры вручную.
class BookApiView(GenericAPIView):
authentication_classes = (JSONWebTokenAuthentication, )
permission_classes = (IsAuthenticated, IsNotBlacklistedUser)
filter_backends = (filters_django.DjangoFilterBackend,)
filter_fields = ('title',)
queryset = self.filter_queryset(self.get_queryset())
def get(self, request, *args, **kwargs):
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)
Примечание: Я не тестировал коды, которые вам, возможно, придется немного подправить.