rest_framework-分頁

分頁

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: 設置該參數,限制一頁請求的大小,防止惡意請求
相關文章
相關標籤/搜索