分页器-DRF-自定义分页器给APIView视图类使用
1、自定义分页器
class APIViewPageNumberPaginations():from rest_framework.pagination import PageNumberPaginationclass APIViewBasePaginations(PageNumberPagination):page_size = 2 # 每页数据量page_query_param = 'page' # ?page=1跳转页max_page_size = 10 # 每页最大数据量page_size_query_param = 'size'def __init__(self, request, serializer, queryset):''':param request: 当前的请求:param serializer: 模型类的序列化器:param queryset: 要操作的模型对象'''self.request = requestself.serializer = serializerself.queryset = querysetdef start(self):# 1、实例分页对象paginat = self.APIViewBasePaginations()# 2、拿到分页后的数据page_list = paginat.paginate_queryset(queryset=self.queryset, request=self.request, view=self)# 3、对分页后的数据将进行序列化ser = self.serializer(instance=page_list, many=True)count = paginat.page.paginator.count # 总数据量next_page = 1 if paginat.get_next_link() else 0 # 有下一页,返回1,没有返回0previous_page = 1 if paginat.get_previous_link() else 0 # 有上一页时,返回1,没有返回0page_size = paginat.page_size # 每页大小pages = count // page_size # 总页数current_page = self.request.query_params.get('page')try:current_page = int(current_page)except Exception as e:current_page = 'error'if count % page_size:pages += 1return {'data': ser.data, # 当前页的数据'next': next_page, # 是否有下一页'previous': previous_page, # 是否有上一页'count': count, # 总数据量'pages': pages, # 总页数'current_page': current_page # 当前的页数}
2、在视图中使用:
class UserInfoAPIView(APIView):#只有管理员才能使用,获取用户信息permission_classes = [permission.AdminPermission]def get(self, request):'''功能:返回用户信息(除了role=1的用户,管理员用户信息不展示):return:'''#搜索的参数name = request.query_params.get('name')role = request.query_params.get('role')# 1、拿到数据集instance = models.UserModel.objects.filter(role__gt=1).order_by('id')if name and name!='全部':instance = instance.filter(name__contains=name)if role and role!='全部':instance = instance.filter(role=role)# 2、拿到序列化器ser = serializer.UserInfoModelSerializer# 3、实例化化分页对象,paginat = APIViewPageNumberPaginations(request, ser, instance)# 4、执行分页功能,拿到分页后的数据data = paginat.start()return Response(data=data)
分页器-DRF-自定义分页器给APIView视图类使用相关推荐
- Django分页器和自定义分页器
一.自定义分页器 import copyclass Pagination():def __init__(self,request,current_page,all_data_num,each_page ...
- antd自定义分页器_自定义分页器
classPagination(object):def __init__(self, current_page, all_count, per_page_num=10, pager_count=11) ...
- page 怎么把list 分页_自定义分页器的实现
前言 django也有自带额分页器,但是功能较少,使用起来较为繁琐.所以我们可以使用自定义非分页器. 自定义分页器的推导思路 # queryset对象是支持索引切片操作的(不支持负数索引) book_ ...
- Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器
文章目录 Django drf 分页查询(批量查询) PageNumberPagination:普通分页 Django 自定义分页器 自定义批量查询的返回结构 LimitOffsetPaginatio ...
- antd自定义分页器_从零开始实现类 antd 分页器(二):分页核心代码
本文是使用 Typescript 开发类 antd 分页器,并发布 npm 的第二篇,因为最近在业务中使用了 antd 中的 Pagination 开发了相关业务,而自己又对组件的封装由很有兴趣,所以 ...
- Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
阅读目录 一.MVC与MTV 二.多对多表的创建 三.ajax,前后端传输编码格式contentType 四.批量插入数据与自定义分页器 摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端 ...
- Django之批量插入数据、 自定义分页器
文章目录 一. 批量插入数据 方法一: 方法二: 批量插入bulk_create方法 二. 自定义分页器 2.1 分页推导 2.2 数据总页面获取 2.3 内置方法之divmod 三. 自定义分页器终 ...
- swiper自定义分页器
html部分 <div class="swiper-container"><div class="swiper-wrapper">&l ...
- python drf_067.Python框架Django之DRF视图类
一 关于视图类的一下概念 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. ...
最新文章
- Windows和linux双系统——改动默认启动顺序
- mysql的proxy机制_MySQL Proxy工作机制浅析
- visual studio内置“iis”组件提取及二次开发
- 龙剑服务器为什么总是维修,《龙剑》2014年3月13日更新维护公告
- 计算机性能在线测评,关于电脑性能测试的常见的几大方法
- [linux] 查看网络丢包信息
- PHP会话控制考察点
- 双十一!!作为程序员的你该如何拥有个人服务器和域名呢?
- js方法写在html中,在js中写html代码怎么写
- python线程执行完后释放内存_Python中的线程终止与内存释放
- Mac下IntelliJ IDEA常用快捷键
- ThinkPHP基础
- inkscape裁剪
- 学习漫画应该如何入门?其实掌握这5种漫画套路就可以啦
- 新款ipad你了解多少?
- 国产Linux系统再添一员猛将,颜值完全不输苹果!
- 聊天机器人简介与体验网址
- linux aio参数,linux内核aio功能
- 黑马程序员java学习打卡----程序流程控制
- vps系统和云服务器搭建,vps系统和云服务器搭建