1. 程式人生 > >rest_framework 分頁三種

rest_framework 分頁三種

roles frame 兩個 添加 .data cursor param gin 上一頁

1.分頁
    a. 分頁 看第n頁 每頁顯示n條數據:
    b. 分頁 在某個位置 向後查看多少條數據
    c. 加密分頁 上一頁和下一頁

    本質:查看 記住頁碼id的最大值和最小值 通過其來準確掃描
    過去的話 會從id 1到n掃描

    第一種分頁
api下的utils.serializers.pager.py
from rest_framework import serializers
from api import models
class PagerSerialiser(serializers.ModelSerializer):
    class Meta:
        model 
= models.Role fields = "__all__" url裏寫 from django.contrib import admin from api import views from django.conf.urls import url urlpatterns = [ url(r^pager1/, views.Pager1View.as_view()) ] 視圖裏寫 from rest_framework.response import Response from api.utils.serializers.pager import PagerSerialiser
from rest_framework.pagination import PageNumberPagination class MyPageNumberPagination(PageNumberPagination): page_size=2 #默認兩個 page_size_query_param = size #傳一個size參數 一頁顯示多少 http://127.0.0.1:8000/pager1/?page=1&size=3 max_page_size = 5 #一頁顯示最大5個 page_query_param = page #頁碼
class Pager1View(APIView): def get(self,request, *args,**kwargs): #獲取所有數據 roles = models.Role.objects.all() #創建分頁對象 pg = MyPageNumberPagination() #在數據庫中獲取分頁數據 pager_roles = pg.paginate_queryset(queryset=roles, request=request,view=self) print(pager_roles) #對分頁數據進行序列化 ser = PagerSerialiser(instance=pager_roles, many=True) return pg.get_paginated_response(ser.data) #返回上一頁或者下一頁 第二種分頁 索引值最大最小值分頁 視圖函數 from django.shortcuts import render,HttpResponse import json # Create your views here. from rest_framework.views import APIView from rest_framework import serializers from api import models class UserInfoserializer(serializers.ModelSerializer): group = serializers.HyperlinkedIdentityField(view_name=gp,lookup_field=group_id,lookup_url_kwarg=pk) class Meta: model = models.UserInfo # fields = __all__ fields = [group] depth = 0 #0到3 4層 class UserInfoView(APIView): def get(self,request, *arg, **kwargs): users = models.UserInfo.objects.all() ser = UserInfoserializer(instance=users, many=True,context={request: request}) #必須添加 context = {request:request} ret = json.dumps(ser.data, ensure_ascii = False) return HttpResponse(ret) class GroupSerializer(serializers.ModelSerializer): class Meta: model = models.UserGroup fields = __all__ class GroupView(APIView): def get(self,request,*args,**kwargs): pk = kwargs.get(pk) obj = models.UserGroup.objects.filter(pk=pk).first() ser = GroupSerializer(instance=obj, many=False) ret = json.dumps(ser.data,ensure_ascii=False) return HttpResponse(ret) from rest_framework.response import Response from api.utils.serializers.pager import PagerSerialiser from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination class MyPageNumberPagination(PageNumberPagination): page_size=2 #默認兩個 page_size_query_param = size #傳一個size參數 一頁顯示多少 http://127.0.0.1:8000/pager1/?page=1&size=3 max_page_size = 5 #一頁顯示最大5個 page_query_param = page #頁碼 class MyPagenumber2Pagination(LimitOffsetPagination): default_limit = 3 limit_query_param = limit #每頁多少條數據 offset_query_param = offset #第幾個索引開始 max_limit = 5 class Pager1View(APIView): def get(self,request, *args,**kwargs): #獲取所有數據 roles = models.Role.objects.all() #創建分頁對象 pg = MyPagenumber2Pagination() #在數據庫中獲取分頁數據 pager_roles = pg.paginate_queryset(queryset=roles, request=request,view=self) print(pager_roles) #對分頁數據進行序列化 ser = PagerSerialiser(instance=pager_roles, many=True) # return pg.get_paginated_response(ser.data) #返回上一頁或者下一頁 return Response(ser.data) 分頁第三種:cursion from rest_framework.response import Response from api.utils.serializers.pager import PagerSerialiser from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination class MyPageNumberPagination(PageNumberPagination): page_size=2 #默認兩個 page_size_query_param = size #傳一個size參數 一頁顯示多少 http://127.0.0.1:8000/pager1/?page=1&size=3 max_page_size = 5 #一頁顯示最大5個 page_query_param = page #頁碼 class MyPagenumber2Pagination(LimitOffsetPagination): default_limit = 3 limit_query_param = limit #每頁多少條數據 offset_query_param = offset #第幾個索引開始 max_limit = 5 class MyPagenumber3Pagination(CursorPagination): cursor_query_param = cursor page_size = 2 ordering = id page_size_query_param = None max_page_size = None class Pager1View(APIView): def get(self,request, *args,**kwargs): #獲取所有數據 roles = models.Role.objects.all() #創建分頁對象 pg = MyPagenumber3Pagination() #在數據庫中獲取分頁數據 pager_roles = pg.paginate_queryset(queryset=roles, request=request,view=self) print(pager_roles) #對分頁數據進行序列化 ser = PagerSerialiser(instance=pager_roles, many=True) return pg.get_paginated_response(ser.data) #返回上一頁或者下一頁

rest_framework 分頁三種