drf——基于apiview写过滤、排序和分页
基于APIView带过滤和排序
from rest_framework.views import APIView
from .models import Book
from .serializer import BookSerializer
from rest_framework.response import Response
class BookView(APIView):
    # /books/?ordering=-price&name=红楼梦
    def get(self,request):
        ordering = request.query_params.get('ordering')
        name = request.query_params.get('name')
        book_list = Book.objects.all()
        if ordering:
            book_list = book_list.order_by(ordering)
        if name:
            book_list = book_list.filter(name__contains=name)
        ser = BookSerializer(instance=book_list,many=True)
        return Response(ser.data)
基于APIView带过滤、排序和分页
from rest_framework.views import APIView
from .models import Book
from .serializer import BookSerializer
from rest_framework.response import Response
from .page import MyPageNumberPagination
class BookView(APIView):
    def get(self,request):
        ordering = request.query_params.get('ordering')
        name = request.query_params.get('name')
        book_list = Book.objects.all()
        if ordering:
            book_list = book_list.order_by(ordering)
        if name:
            book_list = book_list.filter(name__contains=name)
        # 加入分页
        pagination = MyPageNumberPagination()  # 自己写的分页类实例化得到对象
        page = pagination.paginate_queryset(book_list, request, self)
        ser = BookSerializer(instance=page,many=True)
        # return pagination.get_paginated_response(ser.data)
        return Response({
            'code':100,
            'msg':'成功',
            'count':pagination.page.paginator.count,
            'next':pagination.get_next_link(),
            'previous':pagination.get_previous_link(),
            'results':ser.data
        })
"""
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
根据源码写自己的分页
根据ListModelMixin中的page = self.paginate_queryset(queryset)
分页类的对象调用
paginate_queryset是GenericAPIView中的
---->>>paginate_queryset(queryset, self.request, view=self)
再给分类的对象进行序列化 序列化之后return 视图类的对象调用get_paginated_response(serializer.data)
---》会去GenericAPIView中找 最后返回分页类的对象调用get_paginated_response(data)
所以可以在自己写的视图类下 先实例化出一个对象 去调用paginate_queryset
如果返回值不为空则进行序列化
if page is not None:
    # 把page进行了序列化
   serializer = self.get_serializer(page, many=True)
   # 序列化完之后return 分页类的对象调用 get_paginated_response(serializer.data)方法 继承的分页类中的方法
   return self.get_paginated_response(serializer.data)
get_paginated_response(serializer.data)即--->>>
return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('next', self.get_next_link()),
            ('previous', self.get_previous_link()),
            ('results', data)
        ]))
"""
												
											drf——基于apiview写过滤、排序和分页的更多相关文章
- drf-day7——认证组件、权限组件、频率组件、过滤排序、分页
		
目录 一.认证组件 1.1 登录接口 1.2 认证组件使用步骤 1.3 整体代码 1.4认证时cookie的获取方式 二.权限组件 2.1需求分析: 2.2 权限的使用 2.3代码 三.频率组件 3. ...
 - 基于APIView写接口
		
一.视图层代码 """ 基于APIView实现接口的编写 用的是同一个模型表 路由也没变 这次做了解耦合 写了序列化类 与视图类分开了 """ ...
 - DRF 过滤排序分页异常处理
		
DRF 中如何使用过滤,排序,分页,以及报错了如何处理?10分钟get了~
 - Django框架之drf:7、认证组件,权限组件,频率组件,过滤的多种用法,排序,分页,
		
Django框架之drf 一.认证组件 简介:  登录认证的限制  认证组件是drf框架给我们提供的认证接口,它能够在请求进入视图函数/类前进验证(例如:认证用户是否登录),对不符合认证的请求进行 ...
 - drf-jwt手动签发与校验,drf小组件:过滤、筛选、排序、分页
		
复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleR ...
 - drf_jwt手动签发与校验-drf小组件:过滤-筛选-排序-分页
		
签发token 源码的入口:完成token签发的view类里面封装的方法. 源码中在请求token的时候只有post请求方法,主要分析一下源码中的post方法的实现. settings源码: 总结: ...
 - Django框架之drf:8、断点调试,权限、认证、频率组件源码分析,基于APIView编写分页,异常处理
		
Django框架之drf 一.断点调式使用  指,在我们编写代码的时候,程序运行出现报错是无可避免的,当程序 出现报错时,我们需要找到出现报错的代码进行修改,如果时简短的代码很容易就可以找到报错位置 ...
 - Ecside基于数据库的过滤、分页、排序
		
首先ecside展现列表.排序.过滤(该三种操作以下简称为 RSF )的实现原理完全和原版EC一样, 如果您对原版EC的retrieveRowsCallback.sortRowsCallback.fi ...
 - drf-jwt的过滤,筛选,排序,分页组件
		
目录 自定义drf-jwt配置 案例:实现多方式登陆签发token urls.py models.py serializers.py views.py 案例:自定义认证反爬规则的认证类 urls.py ...
 - ModelViewSet里的过滤、排序、分页、序列化设置
		
1.DRF初始化 1.认证 2.权限 3.限流 4.序列化 5.分页 6.版本 7.过滤 8.排序 1.1安装DjangoRestFramework pip install djangoresfra ...
 
随机推荐
- 摆脱鼠标系列 - vscode 花括号 开始结束 间的跳转 Ctrl + Shift + \
			
为什么 摆脱鼠标系列 - vscode 花括号 开始结束 间的跳转 Ctrl + Shift + \ 快速移动到下一个 注意有时候输入法会有问题 因为 Ctrl + Shift 是切换输入法,所以回头 ...
 - 简单实用算法—分布式自增ID算法snowflake(雪花算法)
			
目录 算法概述 ID结构 算法特性 算法代码(C#) 算法测试 算法概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先 ...
 - Kotlin 快速遍历File及子目录筛选指定类型文件
			
原文: Kotlin 快速遍历File及子目录筛选指定类型文件 - Stars-One的杂货小窝 在做文件相关的app,经常会遇到筛选某个文件夹下的符合条件的文件对象,且要包含子文件夹,之前一直是自己 ...
 - day01-项目介绍和功能实现
			
项目练习01 1.项目介绍 这是一个简单的项目练习,用于掌握新学习的SpringBoot技术. 项目操作界面 ● 技术栈 Vue3+ElementPlus+Axios+MyBatisPlus+Spri ...
 - maven解决尝试手段
			
发现原来用的buildBody不好用,百度这个请求有异于其他sdk 关于写身份证接口那边:首先报有两个slf4j冲突,经过查阅,不能包含两个slf4j遂写了exclusion,但是排除不了,要使用** ...
 - 关于linux系统版本的一个分类展现
			
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文发布于 2014-07-06 22:58:35 ...
 - codeforce Round 934 div2 个人题解(A~C)
			
A. Destroying Bridges 时间限制: 1秒 内存限制: 256兆 输入: 标准输入 输出: 标准输出 有 $n$ 个岛屿,编号为 $1,2,-,n$.最初,每对岛屿都由一座桥连接.因 ...
 - RecyclerView瀑布流优化方案探讨
			
目录介绍 01.规则瀑布流实现 02.不规则瀑布流实现 2.1 实现方式 2.2 遇到问题 03.瀑布流上拉加载 04.给瀑布流设置分割线 05.自定义Manager崩溃 06.如何避免刷新抖动 07 ...
 - PowerDesigner操作要点
			
一.PowerDesigner解决name和code同步问题 工具-常规选项-General Options-Dialog-Name to Code mirroring√去掉 二.PowerDesi ...
 - C# Winform 图片 Base64 转换
			
//图片 转为 base64编码的文本 private void button1_Click(object sender, EventArgs e) { OpenFileDialog dlg = ne ...