A simple page (see n-Page, Display of n)
from rest_framework.pagination Import PageNumberPagination # a basic use: url = url = http: //127.0.0.1 :? 8000 / pager / page = 2 & size = 3, size is not valid class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # get all data RET = models.Book.objects.all () # create page objects Page = PageNumberPagination () # get paged in the database data page_list = page.paginate_queryset (ret, request, view = Self) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) returnThe Response (ser.data) # two custom HTTP = url: //127.0.0.1: 8000 / pager / Page = 2 & size = 3? # Size = 30, invalid, up to five class Mypage (PageNumberPagination): PAGE_SIZE = 2 page_query_param = ' Page ' # custom parameter passing page_size_query_param = ' size ' # data of a maximum of max_page_size = 5 class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # Get all data RET = models.Book.objects.all () # create page objects Page = Mypage () # get in the database paging data page_list = page.paginate_queryset (RET, Request, View = Self) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) # return Response (ser.data) # this is returned Response object, but more than the basic Previous, Next, and the total number of data (to understand) return page.get_paginated_response (ser.data)
setting in
= REST_FRAMEWORK { # Showing two ' PAGE_SIZE ' : 2 }
routing:
url(r'^pager/$', views.Pager.as_view()),
Serializers
class BookSerializer1(serializers.ModelSerializer): class Meta: model=models.Book # fields="__all__" exclude=('authors',)
Two offset tab (the n-th position, n data back view)
# Http://127.0.0.1:8000/pager/?offset=4&limit=3 from rest_framework.pagination Import LimitOffsetPagination # can also be customized, with simple paging class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # get all data RET = models.Book.objects.all () # create page objects Page = LimitOffsetPagination () # get paged in the database data page_list = page.paginate_queryset (RET, Request, View = Self ) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) # return page.get_paginated_response(ser.data) return Response(ser.data)
Three CursorPagination (encrypted page, only to see the previous and next, fast)
Thinking: do not override category, modify class properties?
from rest_framework.pagination Import CursorPagination # see the source, through the sql query, greater than, and less than id id class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # Get all data RET = models.Book .objects.all () # create page objects Page = CursorPagination () page.ordering = ' NID ' # in the database acquired paging data page_list = page.paginate_queryset (RET, Request, View = Self) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) # avoided page guessed return page.get_paginated_response (ser.data)
A simple page (see n-Page, Display of n)
from rest_framework.pagination Import PageNumberPagination # a basic use: url = url = http: //127.0.0.1 :? 8000 / pager / page = 2 & size = 3, size is not valid class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # get all data RET = models.Book.objects.all () # create page objects Page = PageNumberPagination () # get paged in the database data page_list = page.paginate_queryset (ret, request, view = Self) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) returnThe Response (ser.data) # two custom HTTP = url: //127.0.0.1: 8000 / pager / Page = 2 & size = 3? # Size = 30, invalid, up to five class Mypage (PageNumberPagination): PAGE_SIZE = 2 page_query_param = ' Page ' # custom parameter passing page_size_query_param = ' size ' # data of a maximum of max_page_size = 5 class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # Get all data RET = models.Book.objects.all () # create page objects Page = Mypage () # get in the database paging data page_list = page.paginate_queryset (RET, Request, View = Self) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) # return Response (ser.data) # this is returned Response object, but more than the basic Previous, Next, and the total number of data (to understand) return page.get_paginated_response (ser.data)
setting in
= REST_FRAMEWORK { # Showing two ' PAGE_SIZE ' : 2 }
routing:
url(r'^pager/$', views.Pager.as_view()),
Serializers
class BookSerializer1(serializers.ModelSerializer): class Meta: model=models.Book # fields="__all__" exclude=('authors',)
Two offset tab (the n-th position, n data back view)
# Http://127.0.0.1:8000/pager/?offset=4&limit=3 from rest_framework.pagination Import LimitOffsetPagination # can also be customized, with simple paging class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # get all data RET = models.Book.objects.all () # create page objects Page = LimitOffsetPagination () # get paged in the database data page_list = page.paginate_queryset (RET, Request, View = Self ) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) # return page.get_paginated_response(ser.data) return Response(ser.data)
Three CursorPagination (encrypted page, only to see the previous and next, fast)
Thinking: do not override category, modify class properties?
from rest_framework.pagination Import CursorPagination # see the source, through the sql query, greater than, and less than id id class Pager (APIView): DEF GET (Self, Request, * args, ** kwargs): # Get all data RET = models.Book .objects.all () # create page objects Page = CursorPagination () page.ordering = ' NID ' # in the database acquired paging data page_list = page.paginate_queryset (RET, Request, View = Self) # paging serializing Ser = BookSerializer1 (= page_list instance, MANY = True) # avoided page guessed return page.get_paginated_response (ser.data)