rest_framework 分頁三種
阿新 • • 發佈:2018-07-21
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 PagerSerialiserfrom 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 分頁三種