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: 设置该参数,限制一页请求的大小,防止恶意请求
posted @ 2019-10-11 17:00  Ivy丶  阅读(142)  评论(0编辑  收藏  举报