rest-framework之分頁

常規分頁

from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
class PublishView(APIView):
    versioning_class =URLPathVersioning
    parser_classes =[JSONParser,]
    def get(self,request,*args,**kwargs):
        #批量添加
        # l1 = []
        # for i in range(100):
        #     l1.append(models.Publish(name='%s出版社'%i,city='%s城市'%i))
        # models.Publish.objects.bulk_create(l1)
        #分頁的第一種方式
        #查詢出全部數據
        ret = models.Publish.objects.all()
        #實例化產生一個普通分頁對象
        page = PageNumberPagination()
        #手動配置每一頁顯示個數
        page.page_size=5
        #手動配置路徑上查詢頁的key的名稱
        page.page_query_param = 'zyl'
        #下面兩個是成對的必去一塊兒寫
        #手動配飾路徑上顯示最多信息條數的key,好比size=10,若是改爲zyl就是zyl=10
        page.page_size_query_param = 'size'
        #限制每一頁最多顯示的頁數,若是size=100,每一頁顯示的仍是10條
        page.max_page_size = 10
        #ret是分頁的全部數據,有個返回結果就是分頁以後的數據,是個列表
        ret_page = page.paginate_queryset(ret,request,self)
        #序列化
        pub_ser = PublishSerializers(ret_page,many=True)
        #去settings裏面配置每一頁顯示多少條
        #  'PAGE_SIZE':2       #每頁顯示兩條信息
        return Response(pub_ser.data)

settings.pyapp

REST_FRAMEWORK = {
    # 每頁顯示兩條
    'PAGE_SIZE':2
}

偏移分頁

    def get(self,request,*args,**kwargs):
        #分頁的第二種方式
        #查詢出全部數據
        ret = models.Publish.objects.all()
        #實例化產生一個普通分頁對象
        page = LimitOffsetPagination()
        #這裏參數就不同了
        #從標杆位置日後取幾個,默認取三個,也能夠指定
        page.default_limit = 3
        #每次取的條數,能夠自定義key值
        page.limit_query_param = 'limit'
        #標杆值,offset=6 就是在第六個位置日後拿三條
        page.offset_query_param = 'offset'
        #對大取10條
        page.max_limit = 10
        #ret是分頁的全部數據,有個返回結果就是分頁以後的數據,是個列表
        ret_page = page.paginate_queryset(ret,request,self)
        #序列化
        pub_ser = PublishSerializers(ret_page,many=True)
        #去settings裏面配置每一頁顯示多少條
        #  'PAGE_SIZE':2       #每頁顯示兩條信息
        return page.get_paginated_response(pub_ser.data)
        # return Response(pub_ser.data)

這裏會把總條數,上一頁的地址,寫一頁的地址返回給你加密

遊標分頁

    def get(self,request,*args,**kwargs):
        #分頁的第三種方式
        #查詢出全部數據
        ret = models.Publish.objects.all()
        #實例化產生一個普通分頁對象
        page = CursorPagination()
        #每個顯示的條數
        page.page_size = 3

        page.cursor_query_param = 'cursor'
        #按什麼排序
        page.ordering='id'
        #ret是分頁的全部數據,有個返回結果就是分頁以後的數據,是個列表
        ret_page = page.paginate_queryset(ret,request,self)
        #序列化
        pub_ser = PublishSerializers(ret_page,many=True)
        #去settings裏面配置每一頁顯示多少條
        #  'PAGE_SIZE':2       #每頁顯示兩條信息
        return page.get_paginated_response(pub_ser.data)
        # return Response(pub_ser.data)

這裏咱們就不知道填什麼了因此就要用到spa

這裏測cursor是加密的。也不能指定哪一頁。rest

相關文章
相關標籤/搜索