a. 根據(jù)頁碼進(jìn)行分頁
from django.conf.urls import url, include
from rest_framework import routers
from web.views import s9_pagination
urlpatterns = [
url(r'^test/', s9_pagination.UserViewSet.as_view()),
]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from rest_framework.views import APIView
from rest_framework import serializers
from .. import models
from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
# 默認(rèn)每頁顯示的數(shù)據(jù)條數(shù)
page_size = 1
# 獲取URL參數(shù)中設(shè)置的每頁顯示數(shù)據(jù)條數(shù)
page_size_query_param = 'page_size'
# 獲取URL參數(shù)中傳入的頁碼key
page_query_param = 'page'
# 最大支持的每頁顯示的數(shù)據(jù)條數(shù)
max_page_size = 1
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.UserInfo
fields = "__all__"
class UserViewSet(APIView):
def get(self, request, *args, **kwargs):
user_list = models.UserInfo.objects.all().order_by('-id')
# 實例化分頁對象房蝉,獲取數(shù)據(jù)庫中的分頁數(shù)據(jù)
paginator = StandardResultsSetPagination()
page_user_list = paginator.paginate_queryset(user_list, self.request, view=self)
# 序列化對象
serializer = UserSerializer(page_user_list, many=True)
# 生成分頁和數(shù)據(jù)
response = paginator.get_paginated_response(serializer.data)
return response
b. 位置和個數(shù)進(jìn)行分頁
from django.conf.urls import url, include
from web.views import s9_pagination
urlpatterns = [
url(r'^test/', s9_pagination.UserViewSet.as_view()),
]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from rest_framework.views import APIView
from rest_framework import serializers
from .. import models
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination
class StandardResultsSetPagination(LimitOffsetPagination):
# 默認(rèn)每頁顯示的數(shù)據(jù)條數(shù)
default_limit = 10
# URL中傳入的顯示數(shù)據(jù)條數(shù)的參數(shù)
limit_query_param = 'limit'
# URL中傳入的數(shù)據(jù)位置的參數(shù)
offset_query_param = 'offset'
# 最大每頁顯得條數(shù)
max_limit = None
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.UserInfo
fields = "__all__"
class UserViewSet(APIView):
def get(self, request, *args, **kwargs):
user_list = models.UserInfo.objects.all().order_by('-id')
# 實例化分頁對象池凄,獲取數(shù)據(jù)庫中的分頁數(shù)據(jù)
paginator = StandardResultsSetPagination()
page_user_list = paginator.paginate_queryset(user_list, self.request, view=self)
# 序列化對象
serializer = UserSerializer(page_user_list, many=True)
# 生成分頁和數(shù)據(jù)
response = paginator.get_paginated_response(serializer.data)
return response
c. 游標(biāo)分頁
from django.conf.urls import url, include
from web.views import s9_pagination
urlpatterns = [
url(r'^test/', s9_pagination.UserViewSet.as_view()),
]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from rest_framework.views import APIView
from rest_framework import serializers
from .. import models
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
class StandardResultsSetPagination(CursorPagination):
# URL傳入的游標(biāo)參數(shù)
cursor_query_param = 'cursor'
# 默認(rèn)每頁顯示的數(shù)據(jù)條數(shù)
page_size = 2
# URL傳入的每頁顯示條數(shù)的參數(shù)
page_size_query_param = 'page_size'
# 每頁顯示數(shù)據(jù)最大條數(shù)
max_page_size = 1000
# 根據(jù)ID從大到小排列
ordering = "id"
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = models.UserInfo
fields = "__all__"
class UserViewSet(APIView):
def get(self, request, *args, **kwargs):
user_list = models.UserInfo.objects.all().order_by('-id')
# 實例化分頁對象猾蒂,獲取數(shù)據(jù)庫中的分頁數(shù)據(jù)
paginator = StandardResultsSetPagination()
page_user_list = paginator.paginate_queryset(user_list, self.request, view=self)
# 序列化對象
serializer = UserSerializer(page_user_list, many=True)
# 生成分頁和數(shù)據(jù)
response = paginator.get_paginated_response(serializer.data)
return response