我们从Python开源项目中,提取了以下3个代码示例,用于说明如何使用rest_framework.pagination.CursorPagination()。
def get_paginator_serializer(self, view, child_serializer_class): class BaseFakeListSerializer(serializers.Serializer): results = child_serializer_class(many=True) class FakePrevNextListSerializer(BaseFakeListSerializer): next = URLField() previous = URLField() # Validate if the view has a pagination_class if not (hasattr(view, 'pagination_class')) or view.pagination_class is None: return BaseFakeListSerializer pager = view.pagination_class if hasattr(pager, 'default_pager'): # Must be a ProxyPagination pager = pager.default_pager if issubclass(pager, (PageNumberPagination, LimitOffsetPagination)): class FakeListSerializer(FakePrevNextListSerializer): count = IntegerField() return FakeListSerializer elif issubclass(pager, CursorPagination): return FakePrevNextListSerializer return BaseFakeListSerializer
def get_pagination_introspector(view, si=None): """ Create pagination introspector based on view :param view: DjangoRestFramework view :param si: SerializerIntrospector :return: PaginationIntrospector :rtype: BasePaginationIntrospector """ if getattr(view, 'pagination_class', None): # DjangoRestFramework 3.0 pagination style with pagination class pagination_class = view.pagination_class from rest_framework import pagination if pagination_class == pagination.PageNumberPagination: return PageNumberPaginationIntrospector(view, pagination_class, si=si) elif pagination_class == pagination.LimitOffsetPagination: return LimitOffsetPaginationIntrospector(view, pagination_class, si=si) elif pagination_class == pagination.CursorPagination: return CursorPaginationIntrospector(view, pagination_class, si=si) else: return BasePaginationIntrospector(view, pagination_class, si=si) else: # Unrecognized view type return BasePaginationIntrospector(si=si)
def pagination_factory(endpoint): pg_cls_name = '{}Pagination'.format(endpoint.model.__name__) page_size = getattr(endpoint, 'page_size', None) pg_cls_attrs = { 'page_size': page_size if page_size is not None else settings.REST_FRAMEWORK.get('PAGE_SIZE', 50), } if hasattr(endpoint, 'pagination_template'): pg_cls_attrs['template'] = endpoint.pagination_template BasePagination = getattr(endpoint, 'base_pagination_class', pagination.PageNumberPagination) if issubclass(BasePagination, pagination.PageNumberPagination): pg_cls_attrs['page_size_query_param'] = getattr(endpoint, 'page_size_query_param', 'page_size') for param in ('django_paginator_class', 'page_query_param', 'max_page_size', 'last_page_string', 'page_size'): if getattr(endpoint, param, None) is not None: pg_cls_attrs[param] = getattr(endpoint, param) elif issubclass(BasePagination, pagination.LimitOffsetPagination): pg_cls_attrs.pop('page_size') for param in ('default_limit', 'limit_query_param', 'offset_query_param', 'max_limit'): if getattr(endpoint, param, None) is not None: pg_cls_attrs[param] = getattr(endpoint, param) elif issubclass(BasePagination, pagination.CursorPagination): for param in ('page_size', 'cursor_query_param', 'ordering'): if getattr(endpoint, param, None) is not None: pg_cls_attrs[param] = getattr(endpoint, param) else: raise ImproperlyConfigured('base_pagination_class needs to be a subclass of one of the following:' 'PageNumberPagination, LimitOffsetPagination, CursorPagination') return type(pg_cls_name, (BasePagination, ), pg_cls_attrs)