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 ...
随机推荐
- FTP的配置和管理
实验环境: 两台windows servers 一台已经配置了FTP服务器,IP为192.168.1.220,vmnet1 一台作为客户端测试,IP为192.168.1.138,vmnet1 一:FT ...
- 08.Java反射问题
目录介绍 8.0.0.1 反射的原理是什么?有哪些途径获取到Class对象,Class类的含义和作用是什么?什么是class类? 8.0.0.2 有哪些方式可以提高反射效率?为何反射消耗性能?究竟是怎 ...
- 记录--UNI-APP安卓本地打包详细教程(保姆级)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.开发环境 uni-app 官方文档地址 原生开发者支持 1.Android Studio 下载地址:Android Studio官网 ...
- 一道题开始认识Symbol
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近每天学习的时候,发现了一道很有趣的面试题 1.const [a, b] = { a: 100, b: 200 } 2.console. ...
- 记录--TS类型写不好?一起来训练提升吧!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前期准备 本篇文章的编写目的是为了提升TS类型的书写质量,高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞; 在学习本篇之前需要有一 ...
- KingbaseES V8R6 数据库运维案例之 -- root用户securecmd连接'Permission denied'错误
案例分析: 在KingbaseES V8R6数据库在不支持ssh连接的系统环境,可以通过securecmdd服务建立主机之间的通讯,默认securecmdd服务建立用户之间的互信,通过publicke ...
- linux系统执行 ifconfig命令ens33没有显示ip地址解决办法
问题背景 安装虚拟机(以ubuntu为例)因为重启或更新等原因导致,无法通过ssh连接到虚拟机,本地cmd窗口ping虚拟机ip发现无法ping通 启动本地虚拟机 发现ens33 位置没有显示 ip地 ...
- Java实现动态数组【数据结构与算法】
1.数组 类型固定.长度固定 连续的内存空间 顺序存储.随机读取 查询快.新增删除慢.最好初始化的时候就指定数组大小.这样就可以避免一定的数组扩容出现的内存消耗. import java.util.A ...
- C++ 简单实现shared_ptr
共享指针 管理指针的存储,提供有限的垃圾回收工具,并可能与其他对象共享该管理. shared_ptr类型的对象都能够获得指针的所有权并共享该所有权:一旦它们获得所有权,当最后一个所有者释放该所有权时, ...
- Spring boot中拦截器的简单使用
1.创建自定义拦截器类:首先,你需要创建一个自定义的拦截器类,该类需要实现HandlerInterceptor接口.例如,你可以创建一个名为CustomInterceptor的类. import or ...