分頁
from django.shortcuts import render
# Create your views here.
from rest_framework import serializers
from rest_framework.views import APIView
from .models import *
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination
class MySerializer(serializers.ModelSerializer):
class Meta:
model = Roles
fields = '__all__'
class MyPagination(PageNumberPagination):
page_size = 1
page_query_param = 'page'
page_size_query_param = 'page_size'
max_page_size = 50
class MyView(APIView):
def get(self, request, *args, **kwargs):
queryset = Roles.objects.all()
pagers = MyPagination()
instance = pagers.paginate_queryset(queryset, request, self)
serializer = MySerializer(instance=instance, many=True)
return Response(serializer.data)
- PageNumberPagination:須要在rest-framework的setting配置:'PAGE_SIZE'
- 使用
- 先實例化一個分頁對象
- 調用實例化對象的paginate_queryset方法,這個方法接受3個參數,查詢的queryset對象,request,view
- 序列化
- 返回
- 自定義分頁對象
- 需繼承PageNumberPagination
- 設置默認的page_size
- page_query_param: 設置該參數,能夠從url的參數裏面獲取請求頁數
- page_size_query_param: 設置該參數,能夠從url的參數裏面獲取請求頁數大小
- max_page_size: 設置該參數,限制一頁請求的大小,防止惡意請求