Python 使用django rest框架根据用户类型更改分页
我尝试根据用户的状态设置WebAPI的分页。如果用户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
是\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是的,事实上,这是最好的方法。事实上,就在几个小时前,我在这个问题上推荐了这种方法: