1. 程式人生 > 實用技巧 >Django DRF 分頁

Django DRF 分頁

Django DRF 分頁

分頁在DRF當中可以一共有三種,可以通過setttings設定,也可也通過自定義設定

PageNumberPagination

使用URL http://127.0.0.1/CarApi/?page=2&page_size=2

這種分頁是按照頁碼和每頁條數進行分頁的,需要指定頁碼和每頁條數

常用引數

方法 描述
page_size 每頁資料條數,預設位空,如果settings當中設定了,價值settings當中的配置
django_paginator_class 採用的django分頁器
page_query_param 頁碼引數欄位
page_query_description 頁碼描述
page_size_query_param 頁最大顯示條數字段
page_size_query_description 分頁

settings配置

在settings當中編寫配置,填入對應的內容

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10  # 每頁數目
}

這種方法會對當前專案所有的展示生效,如果單個檢視需要關閉,可以進行單獨設定:

pagination_class = None

自定義配置

from rest_framework.pagination import PageNumberPagination

class CarPageNumberPagination(PageNumberPagination):
    page_query_param = "page"
    page_size_query_param = 'page_size' #前端收到頁面的關鍵字名稱,預設是page
    max_page_size = 10 #每頁資料個數


class CarViewSet(viewsets.ModelViewSet):
    queryset = Tc.objects.order_by("-id")
    serializer_class = CarSerializers
    pagination_class = CarPageNumberPagination

LimitOffsetPagination

http://127.0.0.1/CarApi/?limit=20&offset=0

這種分頁方法需要設定分頁起始資料位置(offset),資料偏移的量(limit)

常用引數

方法 描述
default_limit 預設每頁
limit_query_param 在路由上偏移欄位的名稱預設是limit
limit_query_description 關於偏移的描述
offset_query_param 分頁起始位置的名稱,預設是offset
offset_query_description 分頁起始位置的描述
max_limit 最大偏移量限制

settings配置

在settings當中編寫配置,填入對應的內容

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 10  # 每頁數目
}

這種方法會對當前專案所有的展示生效,如果單個檢視需要關閉,可以進行單獨設定:

pagination_class = None

自定義配置

from rest_framework.pagination import LimitOffsetPagination

class CarPageNumberPagination(LimitOffsetPagination):
    max_limit = 10 #最大偏移量限制



class CarViewSet(viewsets.ModelViewSet):
    queryset = Tc.objects.order_by("-id")
    serializer_class = CarSerializers
    pagination_class = CarPageNumberPagination

CursorPagination

加密分頁,對上下頁頁碼進行了加密

http://127.0.0.1/CarApi/?cursor=cD0zMjgzMTgx

常用引數

方法 描述
cursor_query_param 頁碼引數
cursor_query_description 頁碼描述
page_size 每頁資料
invalid_cursor_message 分頁起始位置的名稱,預設是offset
ordering 排序,必須設定,否則會報錯
page_size_query_param 頁面資料條數設定

settings配置

由於沒有找到排序的引數替代品,所以,暫時沒有找到方法。

自定義配置

class CarPageNumberPagination(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 10
    ordering = '-id'


class CarViewSet(viewsets.ModelViewSet):
    queryset = Tc.objects.order_by("-id")
    serializer_class = CarSerializers
    pagination_class = CarPageNumberPagination