第一種分頁PageNumberPagination
基本使用
(1)urls.py
urlpatterns = [ re_path('(?P<version>[v1|v2]+)/page1/', Pager1View.as_view(),) #分頁1](2)api/utils/serializers/pager.py
# api/utils/serializsers/pager.pyfrom rest_framework import serializersfrom api import modelsclass PagerSerialiser(serializers.ModelSerializer): class Meta: model = models.Role fields = "__all__"
(3)views.py
from api.utils.serializsers.pager import PagerSerialiserfrom rest_framework.response import Responsefrom rest_framework.pagination import PageNumberPaginationclass Pager1View(APIView): def get(self,request,*args,**kwargs): #獲取所有數據 roles = models.Role.objects.all() #創建分頁對象 pg = PageNumberPagination() #獲取分頁的數據 page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) #對數據進行序列化 ser = PagerSerialiser(instance=page_roles,many=True) return Response(ser.data)
(4)settings配置
REST_FRAMEWORK = { #分頁 "PAGE_SIZE":2 #每頁顯示多少個}
自定義分頁類
#自定義分頁類class MyPageNumberPagination(PageNumberPagination): #每頁顯示多少個 page_size = 3 #默認每頁顯示3個,可以通過傳入pager1/?page=2&size=4,改變默認每頁顯示的個數 page_size_query_param = "size" #最大頁數不超過10 max_page_size = 10 #獲取頁碼數的 page_query_param = "page"class Pager1View(APIView): def get(self,request,*args,**kwargs): #獲取所有數據 roles = models.Role.objects.all() #創建分頁對象,這里是自定義的MyPageNumberPagination pg = MyPageNumberPagination() #獲取分頁的數據 page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) #對數據進行序列化 ser = PagerSerialiser(instance=page_roles,many=True) return Response(ser.data)

第二種分頁 LimitOffsetPagination
自定義
#自定義分頁類2class MyLimitOffsetPagination(LimitOffsetPagination): #默認顯示的個數 default_limit = 2 #當前的位置 offset_query_param = "offset" #通過limit改變默認顯示的個數 limit_query_param = "limit" #一頁最多顯示的個數 max_limit = 10class Pager1View(APIView): def get(self,request,*args,**kwargs): #獲取所有數據 roles = models.Role.objects.all() #創建分頁對象 pg = MyLimitOffsetPagination() #獲取分頁的數據 page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) #對數據進行序列化 ser = PagerSerialiser(instance=page_roles,many=True) return Response(ser.data)
新聞熱點
疑難解答