# app.models.py :数据层 class Book(models.Model): name = models.CharField(max_length=20) price = models.DecimalField(max_digits=5, decimal_places=2) # objectjson.py :序列化 class BookJson(serializers.ModelSerializer): class Meta: model = models.Book fields = '__all__' # urls.py urlpatterns = [ url(r'^books/', views.Books.as_view()), ] # views.py class Books(APIView): def post(self, request): list = [] for i in range(1, 51): list.append(models.Book(name='第%s书' % i, price=i)) models.Book.objects.bulk_create(list) return Response({ 'status': 0, 'message': 'ok' })
简单分页
from rest_framework.pagination import PageNumberPagination class Books(APIView): authentication_classes = [] permission_classes = [] throttle_classes = [] def get(self, request): # 没有分页的所有数据 book_list = models.Book.objects.all() # 完成分页 # 1)初始化分页对象 page_simple = PageNumberPagination() # 2)配置分页对象 # page_simple.page_size = api_settings.PAGE_SIZE # 一页显示的条数 page_simple.page_size = 5 # /books/?pages = 3 默认page page_simple.page_query_param = 'pages' # /books/?pages=3&line=10 用户可以自定义访问一页有多少数据 page_simple.page_size_query_param = 'line' # 限制用户自定义一页最大访问的条数 page_simple.max_page_size = 10 # 3)操作分页后一页的数据 book_page_list = page_simple.paginate_queryset(book_list,request,self) # 将一页的数据序列化后返回给前台 book_data = objectjson.BookJson(book_page_list, many=True).data return Response({ 'status': 0, 'message': 'ok', 'results': book_data })
from rest_framework.pagination import LimitOffsetPagination class Books(APIView): authentication_classes = [] permission_classes = [] throttle_classes = [] def get(self, request): # 没有分页的所有数据 book_list = models.Book.objects.all() # 完成分页 # 1)初始化分页对象 page_limit = LimitOffsetPagination() # 2)配置分页对象 # 一页显示的条数 page_limit.default_limit = 5 # 自定义一页获取的条数 page_limit.limit_query_param = 'limit' # 从哪条数据开始查 page_limit.offset_query_param = 'offset' # 自定义最大获取一页的条数 page_limit.max_limit=8 # 3)操作分页数据 book_page_list = page_limit.paginate_queryset(book_list, request, self) # 将一页的数据序列化后返回给前台 book_data = objectjson.BookJson(book_page_list, many=True).data return Response({ 'status': 0, 'message': 'ok', 'results': book_data }) # return page_limit.get_paginated_response(book_data) # 内部提供的Response对象
游标分页
from rest_framework.pagination import CursorPagination class Books(APIView): authentication_classes = [] permission_classes = [] throttle_classes = [] def get(self, request): book_list = models.Book.objects.all() # 完成分页 # 1)初始化分页对象 page_cursor = CursorPagination() # 2)配置分页对象 # 一页的条数 page_cursor.page_size = 10 # 排序的字段可以正向也可以反向 page_cursor.ordering = 'id' # 游标的关键字 page_cursor.cursor_query_param = 'cursor' # 3)操作分页数据 book_page_list = page_cursor.paginate_queryset(book_list, request, self) book_data = objectjson.BookJson(book_page_list, many=True).data return Response({ 'status': 0, 'message': 'ok', 'previous': page_cursor.get_previous_link(), # 上一页 'next': page_cursor.get_next_link(), # 下一页 'results': book_data })