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) # 修改这行代码,实现翻页

浙公网安备 33010602011771号