DRF分页组件
时间:2019-09-23
本文章向大家介绍DRF分页组件,主要包括DRF分页组件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
DRF分页组件三种方式:
models.py:
from django.db import models class UserRole(models.Model): role = models.CharField(max_length=12)
urls.py
from django.conf.urls import url from api import views urlpatterns = [ url(r'^(api/v1/roles/', views.UserRoleView.as_view(), name='role'), ]
views.py
from api import models from rest_framework.views import APIView from rest_framework import serializers from django.http.response import JsonResponse from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination #分页组件(可以直接在全局配置PAGE_SIZE指定每页显示条数使用,也可再自定义类进行继承重写属性) ''' #(1)第page页,page_size条 PageNumberPagination #(2)从offset位置开始,获取limit页 LimitOffsetPagination #(3)加密cursor游标页码,自带排序!!!,自动上一页下一页 CursorPagination ''' #序列化器 class UserRoleSerializer1(serializers.ModelSerializer): class Meta: model = models.UserRole fields = "__all__" #(2-1)自定义分页类----继承PageNumberPagination--http://127.0.0.1:8000/api/v1/roles/?page=3&page_size=4 class MyPageNumberPagination(PageNumberPagination): #①定义每页默认显示数量--可以在settings.py中定义PAGE_SIZE即可或者在此定义 page_size = 2 #②定义页码查询参数,默认page,不指定值默认从1开始 page_query_param = 'page' #③定义每页显示数量查询参数,无默认值,不指定值为默认数量 page_size_query_param = 'page_size' #④定义页面显示最大数量(只针对指定page_size时生效),默认值None max_page_size = 1 # (2-2)自定义分页类----继承LimitOffsetPagination--http://127.0.0.1:8000/api/v1/roles/?offset=9&limit=9 class MyLimitOffsetPagination(LimitOffsetPagination): # ①定义每页默认显示数量--可以在settings.py中定义PAGE_SIZE即可或者在此定义 default_limit = 2 #②定义查询显示数量查询参数,默认limit,不指定值则为默认数量 limit_query_param = 'limit' # ③定义查询起始位置参数,默认offset,不指定值默认从0开始 offset_query_param = 'offset' # ④定义页面显示最大数量(只针对指定limit时生效),默认值None max_limit = 10 # (2-3)自定义分页类----继承CursorPagination--http://127.0.0.1:8000/api/v1/roles/?size=12 class MyCursorPagination(CursorPagination): # ①定义每页默认显示数量--可以在settings.py中定义PAGE_SIZE即可或者在此定义 page_size = 2 #②指定页码查询参数,默认cursor,但是不能为其指定值,CursorPagination对页码自行加密了 cursor_query_param = 'cursor' # ③定义每页显示数量查询参数,无默认值,不指定值为默认数量 page_size_query_param = 'size' # ④定义页面显示最大数量(只针对指定size时生效),默认值None max_page_size = 10 #⑤定义排序字段(加负号表示逆序),可以指定单个字段,或者列表,元组 # ordering = '-id' ordering =('-id','role') class UserRoleView(APIView): filter_backends = ['id'] def get(self,request,*args,**kwargs): #一、获取数据 roles = models.UserRole.objects.all() #二、分页:实例化分页对象page #(1)自带分页组件类(必须在settings.py配置PAGE_SIZE每页显示条数) ''' #(1-1)PageNumberPagination--#http://127.0.0.1:8000/api/v1/roles/?page=4(不指定page默认第一页,取PAGE_SIZE个) # page = PageNumberPagination() #(1-2)LimitOffsetPagination--#http://127.0.0.1:8000/api/v1/roles/?offset=1&limit=1(指定offset开始位置默认0,不指定limit默认取PAGE_SIZE个) # page = LimitOffsetPagination() #(1-3)CursorPagination--自带排序功能(ordering参数指定排序字段,默认ordering = '-created',一般都是自定义使用,自动对页码cursor加密)http://127.0.0.1:8000/api/v1/roles/ # page = CursorPagination() ''' #(2)自定义分页类(继承相关类) # page =MyPageNumberPagination()#(2-1) # page =MyLimitOffsetPagination()#(2-2) page =MyCursorPagination()#(2-3) page_roles=page.paginate_queryset(roles,request,view=self) #三、数据序列化 ser_roles = UserRoleSerializer1(instance=page_roles,many=True) ret =ser_roles.data #四、返回数据 # return JsonResponse(ret,safe=False,json_dumps_params={'ensure_ascii':False})#注意序列化结果多条是个列表 return page.get_paginated_response(ret)#直接返回总数和前后页链接
settings.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'api.apps.ApiConfig', 'rest_framework', ] REST_FRAMEWORK = { #分页组件 'PAGE_SIZE':3 }
原文地址:https://www.cnblogs.com/open-yang/p/11573538.html
- 用于时间序列预测的Python环境
- Pandoc安装实现Markdown转PDF (CentOS6)
- String类replaceAll方法正则替换深入分析
- 微信硬件平台对接--蓝牙
- 初试git+github(linux环境)
- Raspberry PI Nginx 安装
- 微信支付-Java-SpringMVC基础一些代码支持
- 使用Kafka的High Level Consumer
- 微信公众号发送模板消息 Java实现。
- [Intellij IDEA]File size exceeds configured limit
- 那些年Struts 1.X 而今我还是不会
- 关于MySQL DNS解析探究之一:DNS解析确实在起作用
- 每一个程序员需要了解的10个Linux命令
- 实战案例 | 使用机器学习和大数据预测心脏病
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法