사용자 상태에 따라 WebAPI의 페이지 매김을 설정하려고합니다. 사용자 is_anonymous
사용자는 쿼리 매개 변수로 페이지 크기를 설정할 수 없습니다. 하나의 뷰 클래스를 사용하여이 작업을 수행하려고합니다. 나는 두 개의 서로 다른 뷰 클래스를 사용하여 그것들을 수행 할 수 있었고 그 중 하나에 대한 액세스를 제한 할 수있었습니다.하지만 이것이 좋은 해결책은 아니라고 생각합니다.장고 휴식 프레임 워크로 사용자 유형에 따라 페이지 매김을 변경하십시오.
보기 클래스 :
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
오류 메시지 :
property paginator
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'
는 원래 클래스 GenericAPIView에 선언되어있다. 내가 제대로 다시 구현하는지 모르겠습니다. 두 가지 맞춤 페이지 매김 클래스를 사용하여 설정하면 작동합니다. pagination_class
이 작업을하려면 도움이 필요합니다.
오 마이 갓, 얼마나 당혹 스럽습니까. 고마워요! 이처럼 페이지 매김을 사용하는 것이 좋은 생각이라고 생각하십니까? –
@ChristianRapp 네, 사실 그것이 그것을 수행하는 가장 좋은 방법입니다. 사실, 나는이 질문에서 몇 시간 전에 접근법을 추천했다 : http://stackoverflow.com/questions/38988272/django-rest-framework-drf-how-to-set-pagination-class-depend-on-query -param/38989390 # 38989390 – levi