Django rest framework——2

分页

使用PageNumberPagination:

api/utils/pager/PagerSerializer:

from rest_framework import serializers
from api import models


class PagerSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Role
        fields = "__all__"

  

from api.utils.pager import PagerSerializer
from rest_framework.response import Response  # 注册rest_framew
from rest_framework.pagination import PageNumberPagination


class PagerView(APIView):
    # 先在settings.py中设置PAGE_SIZE = 2 指定每页显示的数据

    def get(self, request, *args, **kwargs):
        # 获取所有数据
        roles = models.Role.objects.all()

        # 创建分页对象
        pg = PageNumberPagination()

        # 获取分页数据
        page_data = pg.paginate_queryset(queryset=roles, request=request)

        # 序列化分页数据
        ser = PagerSerializer(instance=page_data, many=True)
        return Response(ser.data)

自定义分页:

from api.utils.pager import PagerSerializer
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination


class MyPageNumberPagination(PageNumberPagination):
    page_size = 3                     # 指定每页显示的数据
    page_size_query_param = 'size'    # 在url中自定义每页显示的数据条数的关键字
    max_page_size = 5                 # 限制每页最多显示的数据

    page_query_param = 'mypage'         # 指定页码的关键字

    # http://127.0.0.1:8000/api/page/?mypage=2&size=4
    # http://127.0.0.1:8000/api/page/?size=5


class PagerView(APIView):
    # 先在settings.py中设置PAGE_SIZE = 2 指定每页显示的数据

    def get(self, request, *args, **kwargs):
        # 获取所有数据
        roles = models.Role.objects.all()

        # 创建分页对象
        pg = MyPageNumberPagination()

        # 获取分页数据
        page_data = pg.paginate_queryset(queryset=roles, request=request)

        # 序列化分页数据
        ser = PagerSerializer(instance=page_data, many=True)
        return Response(ser.data)

翻页:

from api.utils.pager import PagerSerializer
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination


class MyPageNumberPagination(PageNumberPagination):
    page_size = 3                     # 指定每页显示的数据
    page_size_query_param = 'size'    # 在url中自定义每页显示的数据条数的关键字
    max_page_size = 5                 # 限制每页最多显示的数据

    page_query_param = 'mypage'         # 指定页码的关键字

    # http://127.0.0.1:8000/api/page/?mypage=2&size=4
    # http://127.0.0.1:8000/api/page/?size=5


class PagerView(APIView):
    # 先在settings.py中设置PAGE_SIZE = 2 指定每页显示的数据

    def get(self, request, *args, **kwargs):
        # 获取所有数据
        roles = models.Role.objects.all()

        # 创建分页对象
        pg = MyPageNumberPagination()

        # 获取分页数据
        page_data = pg.paginate_queryset(queryset=roles, request=request)

        # 序列化分页数据
        ser = PagerSerializer(instance=page_data, many=True)
        # return Response(ser.data)
        return pg.get_paginated_response(ser.data)    # 修改这行代码,实现翻页

LimitOffsetPagination:

from api.utils.pager import PagerSerializer
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination


class MyLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 3               # 向后去几条数据
    limit_query_param = 'limit'
    offset_query_param = 'offset'

    max_limit = None


class PagerView(APIView):
    # 先在settings.py中设置PAGE_SIZE = 2 指定每页显示的数据

    def get(self, request, *args, **kwargs):
        # 获取所有数据
        roles = models.Role.objects.all()

        # 创建分页对象
        pg = MyLimitOffsetPagination()

        # 获取分页数据
        page_data = pg.paginate_queryset(queryset=roles, request=request)

        # 序列化分页数据
        ser = PagerSerializer(instance=page_data, many=True)
        # return Response(ser.data)
        return pg.get_paginated_response(ser.data)    # 修改这行代码,实现翻页

CursorPagination (加密页码的分页)

from api.utils.pager import PagerSerializer
from rest_framework.response import Response
from rest_framework.pagination import CursorPagination


class MyCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 3
    ordering = 'id'

    page_size_query_param = 'size'  # 在url中自定义每页显示的数据条数的关键字

    max_page_size = 5

    # http://127.0.0.1:8000/api/page/?cursor=cD0z&size=2


class PagerView(APIView):
    # 先在settings.py中设置PAGE_SIZE = 2 指定每页显示的数据

    def get(self, request, *args, **kwargs):
        # 获取所有数据
        roles = models.Role.objects.all()

        # 创建分页对象
        pg = MyCursorPagination()

        # 获取分页数据
        page_data = pg.paginate_queryset(queryset=roles, request=request)

        # 序列化分页数据
        ser = PagerSerializer(instance=page_data, many=True)
        # return Response(ser.data)
        return pg.get_paginated_response(ser.data)    # 修改这行代码,实现翻页

 

posted @ 2018-03-08 20:44  流星之泪  阅读(114)  评论(0)    收藏  举报