Python 使用django rest框架根据用户类型更改分页

Python 使用django rest框架根据用户类型更改分页,python,django,pagination,django-rest-framework,Python,Django,Pagination,Django Rest Framework,我尝试根据用户的状态设置WebAPI的分页。如果用户是\u匿名的,他应该无法使用查询参数设置页面大小。我尝试用一个视图类来实现这一点。我可以用两个不同的视图类来实现,并限制对其中一个视图类的访问,但我认为这不是一个好的解决方案 视图类: class WeathermList(generics.ListAPIView): queryset = WeatherMeasurements.objects.all() serializer_class = WeatherMeasuremen

我尝试根据用户的状态设置WebAPI的分页。如果用户
是\u匿名的
,他应该无法使用查询参数设置页面大小。我尝试用一个视图类来实现这一点。我可以用两个不同的视图类来实现,并限制对其中一个视图类的访问,但我认为这不是一个好的解决方案

视图类:

class WeathermList(generics.ListAPIView):
    queryset = WeatherMeasurements.objects.all()
    serializer_class = WeatherMeasurementsSer
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,)
    filter_class = WeatherMeasurementsFilter
    ordering_fields = ('measure_datetime',)
    ordering = ('measure_datetime',)

    @property
    def paginator(self):
        """
        The paginator instance associated with the view, or `None`.
        """
        if not hasattr(self, '_paginator'):
            # import ipdb
            # ipdb.set_trace()
            if self.request.user.is_anonymous:
                self._paginator = AnonymousPaginator
            else:
                self._paginator = RegisteredPaginator
        return self._paginator
分页类:

class RegisteredPaginator(PageNumberPagination):
    page_size = 288
    page_size_query_param = 'page_size'
    max_page_size = 10000


class AnonymousPaginator(PageNumberPagination):
    page_size = 288
错误消息:

File ".../env/lib/python3.5/site-packages/rest_framework/generics.py", line 172, in paginate_queryset
    return self.paginator.paginate_queryset(queryset, self.request, view=self)
TypeError: paginate_queryset() missing 1 required positional argument: 'request'
属性paginator
最初是在类中声明的。我不确定我是否正确地重新实现了它。当我使用
pagination_class


非常感谢您为这项工作提供的任何帮助。

问题是:
self.\u paginator
需要一个paginator类实例,而不是类本身

它应该是
AnonymousPaginator()
RegisteredPaginator()
,而不是
AnonymousPaginator
RegisteredPaginator

        if self.request.user.is_anonymous:
            self._paginator = AnonymousPaginator()
        else:
            self._paginator = RegisteredPaginator()

问题是:
self.\u paginator
需要一个paginator类实例,而不是类本身

它应该是
AnonymousPaginator()
RegisteredPaginator()
,而不是
AnonymousPaginator
RegisteredPaginator

        if self.request.user.is_anonymous:
            self._paginator = AnonymousPaginator()
        else:
            self._paginator = RegisteredPaginator()

天哪,真尴尬。非常感谢你!你认为这样使用分页是个好主意吗?@ChristianRapp是的,事实上,这是最好的方法。事实上,就在几个小时前,我在这个问题上推荐了这种方法:哦,天哪,真尴尬。非常感谢你!你认为这样使用分页是个好主意吗?@ChristianRapp是的,事实上,这是最好的方法。事实上,就在几个小时前,我在这个问题上推荐了这种方法: