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