基于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写过滤、排序和分页的更多相关文章

  1. drf-day7——认证组件、权限组件、频率组件、过滤排序、分页

    目录 一.认证组件 1.1 登录接口 1.2 认证组件使用步骤 1.3 整体代码 1.4认证时cookie的获取方式 二.权限组件 2.1需求分析: 2.2 权限的使用 2.3代码 三.频率组件 3. ...

  2. 基于APIView写接口

    一.视图层代码 """ 基于APIView实现接口的编写 用的是同一个模型表 路由也没变 这次做了解耦合 写了序列化类 与视图类分开了 """ ...

  3. DRF 过滤排序分页异常处理

    DRF 中如何使用过滤,排序,分页,以及报错了如何处理?10分钟get了~

  4. Django框架之drf:7、认证组件,权限组件,频率组件,过滤的多种用法,排序,分页,

    Django框架之drf 一.认证组件 简介: ​ 登录认证的限制 ​ 认证组件是drf框架给我们提供的认证接口,它能够在请求进入视图函数/类前进验证(例如:认证用户是否登录),对不符合认证的请求进行 ...

  5. drf-jwt手动签发与校验,drf小组件:过滤、筛选、排序、分页

    复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleR ...

  6. drf_jwt手动签发与校验-drf小组件:过滤-筛选-排序-分页

    签发token 源码的入口:完成token签发的view类里面封装的方法. 源码中在请求token的时候只有post请求方法,主要分析一下源码中的post方法的实现. settings源码: 总结: ...

  7. Django框架之drf:8、断点调试,权限、认证、频率组件源码分析,基于APIView编写分页,异常处理

    Django框架之drf 一.断点调式使用 ​ 指,在我们编写代码的时候,程序运行出现报错是无可避免的,当程序 出现报错时,我们需要找到出现报错的代码进行修改,如果时简短的代码很容易就可以找到报错位置 ...

  8. Ecside基于数据库的过滤、分页、排序

    首先ecside展现列表.排序.过滤(该三种操作以下简称为 RSF )的实现原理完全和原版EC一样, 如果您对原版EC的retrieveRowsCallback.sortRowsCallback.fi ...

  9. drf-jwt的过滤,筛选,排序,分页组件

    目录 自定义drf-jwt配置 案例:实现多方式登陆签发token urls.py models.py serializers.py views.py 案例:自定义认证反爬规则的认证类 urls.py ...

  10. ModelViewSet里的过滤、排序、分页、序列化设置

    1.DRF初始化 1.认证 2.权限 3.限流 4.序列化 5.分页 6.版本  7.过滤 8.排序 1.1安装DjangoRestFramework pip install djangoresfra ...

随机推荐

  1. Python 初学者容易踩的坑

    哈喽大家好,我是咸鱼. 今天咸鱼列出了一些大家在初学 Python 的时候容易踩的一些坑,看看你有没有中招过. 原文:https://www.bitecode.dev/p/unexpected-pyt ...

  2. tomcat SSL安全连接配置简介

    tomcat中使用https提供服务,配置的方式有两种.生成或购买CA证书时会要求绑定域名.设置密码和证书别名(aliase). tomcat可用的证书列表里用三个文件: 方式一: <Conne ...

  3. class cl表示 汇聚 集合 ss表示 阴性 这里表示抽象

    class cl表示 汇聚 集合 ss表示 阴性 这里表示抽象

  4. docker部署文件

  5. Kubernetes集群部署Node Feature Discovery组件用于检测集群节点特性

    1.概述 Node Feature Discovery(NFD)是由Intel创建的项目,能够帮助Kubernetes集群更智能地管理节点资源.它通过检测每个节点的特性能力(例如CPU型号.GPU型号 ...

  6. CSS(语义化标签、多媒体标签、新表单元素、属性选择器、结构伪类选择器、伪元素选择器、盒子模型、滤镜、calc函数、过渡)

    一.HTML5新特性 概述 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签.新的表单和新的表单属性等. 这些新特性都有兼容性问题,基本是 IE9+ 以上版本的浏览器才支持,如果不考虑 ...

  7. package.json报错"No license field"问题解决

    问题描述 warning package.json: No license field 问题原因 package.json中缺少license字段 解决方法 package.json中添加licens ...

  8. drools中使用全局变量

    一.背景 在我们编写drools的规则文件的时候,有些时候需要用到全局变量,那么这个该怎么实现呢?有哪些注意事项呢? 二.前置知识 1.语法结构 2.全局变量的特点 使用global来定义全局变量,它 ...

  9. KingbaseES V8R6集群部署案例之---openEuler系统脚本部署故障

    案例说明: 在openEuler系统下通过脚本方式部署KingbaseES V8R6集群,脚本执行过程中,加载vip失败.本次故障问题,主要是因为openEuler系统shell和脚本的不兼容引起. ...

  10. 【已解决】Windows环境下redis启动失败

    在redis安装目录下打开cmd窗口: 依次输入: redis-cli.exe shutdown exit redis-server.exe redis.windows.conf ps:启动失败可能是 ...