DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter
drf偏移分页组件
paginations.py
- from rest_framework.pagination import LimitOffsetPagination
- class MyLimitOffsetPagination(LimitOffsetPagination):
- # ?offset=从头偏移的条数&limit=要显示的条数
- limit_query_param = 'limit'
- offset_query_param = 'offset'
- # ?不传offset和limit默认显示前3条,只设置offset就是从偏移位往后再显示3条
- default_limit = 3
- # ?limit可以自定义一页显示的最大条数
- max_limit = 5
#eg:/cars/?offset=1&limit=4 往后偏移一位,然后往后数四个数据- # 只使用limit结合ordering可以实现排行前几或后几
#?ordering=-price&limit=2 价格降序,取最前面两条数据
views.py
- from rest_framework.generics import ListAPIView
- class CarListAPIView(ListAPIView):
- # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
- queryset = models.Car.objects.all()
- serializer_class = serializers.CarModelSerializer
- # 分页组件 - 给视图类配置分页类即可 - 分页类需要自定义,继承drf提供的分页类即可
- pagination_class = pagenations.MyLimitOffsetPagination
drf游标分页组件(了解)
paginations.py
- # 注:必须基于排序规则下进行分页
- # 1)如果接口配置了OrderingFilter过滤器,那么url中必须传ordering
- # 1)如果接口没有配置OrderingFilter过滤器,一定要在分页类中声明ordering按某个字段进行默认排序
- from rest_framework.pagination import CursorPagination
- class MyCursorPagination(CursorPagination):
- cursor_query_param = 'cursor'
- page_size = 3
- page_size_query_param = 'page_size'
- max_page_size = 5
- ordering = '-pk'
views.py
- from rest_framework.generics import ListAPIView
- class CarListAPIView(ListAPIView):
- # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
- queryset = models.Car.objects.all()
- serializer_class = serializers.CarModelSerializer
- # 分页组件 - 给视图类配置分页类即可 - 分页类需要自定义,继承drf提供的分页类即可
- pagination_class = pagenations.MyCursorPagination
自定义过滤器
filters.py
- # 自定义过滤器,接口:?limit=显示的条数
- class LimitFilter:
- def filter_queryset(self, request, queryset, view):
- # 前台固定用 ?limit=... 传递过滤参数
- limit = request.query_params.get('limit')
- if limit:
- limit = int(limit)
- return queryset[:limit]
- return queryset
views.py
- from rest_framework.generics import ListAPIView
- class CarListAPIView(ListAPIView):
- # 如果queryset没有过滤条件,就必须 .all(),不然分页会出问题
- queryset = models.Car.objects.all()
- serializer_class = serializers.CarModelSerializer
- # 局部配置 过滤类 们(全局配置用DEFAULT_FILTER_BACKENDS)
- filter_backends = [LimitFilter]
接口:/?limit=5 显示5条数据
过滤器插件:django-filter
安装
- pip install django-filter
过滤条件层:自定义app01/filters.py
- # django-filter插件过滤器类
- from django_filters.rest_framework.filterset import FilterSet
- from . import models
- # 自定义过滤字段
- from django_filters import filters
- class CarFilterSet(FilterSet):
- min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')
- max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')
- class Meta:
- model = models.Car
- fields = ['brand', 'min_price', 'max_price']
- # brand是model中存在的字段,一般都是可以用于分组的字段
- # min_price、max_price是自定义字段,需要自己自定义过滤条件
视图层:views.py
- # django-filter插件过滤器
- from django_filters.rest_framework import DjangoFilterBackend
- from .filters import CarFilterSet
- class CarListAPIView(ListAPIView):
- queryset = models.Car.objects.all()
- serializer_class = serializers.CarModelSerializer
- # 局部配置 过滤类 们(全局配置用DEFAULT_FILTER_BACKENDS)
- filter_backends = [DjangoFilterBackend]
- # django-filter过滤器插件使用
- filter_class = CarFilterSet
- # 接口:?brand=...&min_price=...&max_price=...
- # eg:?brand=宝马&min_price=5&max_price=10 => 5~10间的宝马牌汽车
DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter的更多相关文章
- DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)
url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...
- drf框架 - 过滤组件 | 分页组件 | 过滤器插件
drf框架 接口过滤条件 群查接口各种筛选组件数据准备 models.py class Car(models.Model): name = models.CharField(max_length=16 ...
- DRF框架之 serializers 序列化组件
1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers ...
- DRF框架学习总结
DRF框架安装配置及其功能概述 Django与DRF 源码视图解析 DRF框架序列化和返序列化 DRF框架serializers中ModelSerializer类简化序列化和反序列化操作 DRF源码s ...
- DRF框架简介(第一天)
1.drf框架全称 djangorestframework 1.如何安装drf框架: pip3 install djangorestframework #drf框架其实就是一个app称之为drf #d ...
- drf框架中分页组件
drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...
- drf偏移分页组件-游标分页-自定义过滤器-过滤器插件django-filter
drf偏移分页组件 LimitOffsetPagination 源码分析:获取参数 pahenations.py from rest_framework.pagination import Limit ...
- DRF框架(八)——drf-jwt手动签发与校验、搜索过滤组件、排序过滤组件、基础分页组件
自定义drf-jwt手动签发和校验 签发token源码入口 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口,不然进不了登录页面 获取提交的username ...
- DRF框架中分页功能接口
目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...
随机推荐
- [RN] React Native 打包时 减少 Apk 的大小
React Native 打包时 减少 Apk 的大小 主要有两个方法: 在打包前设置 android\app\build.gradle 文件中 1) def enableProguardInRele ...
- OpenFOAM——在钝板上分离的层流
本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL063: Separated Laminar Flow Over a Blunt ...
- 深入ES6中的class类
今天在学习vuex时,遇到了定义store类时的一种写法,就是在类中的方法使用箭头函数绑定this的问题时的一种操作,感觉写法有点陌生,遂深究一番,好了上代码 此处写commit中的地方,是为了绑定t ...
- 享元模式(Flyweight Pattern)
定义: 采用一个共享来避免大量拥有相同内容对象的开销.这种开销中最常见.直观的就是内存的损耗.享元模式以共享的方式高效的支持大量的细粒度对象. 享元的英文是flyweight,是一个来自体育方面的专业 ...
- Octopus501工作站 安装记录
cmake libreadline-dev 没有运行程序,nvidia-smi查看GPU-Util 达到100% 解决方案:需要把驱动模式设置为常驻内存才可以,设置命令:nvidia-smi -pm ...
- leetcode 85. 最大矩形
题目描述: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 思路分析: 这题是之前那道最大正方形的进阶,同样是利用dp来求解.通过逐行去计算最大矩形,即优化的 ...
- MORMOT REST文件上传
MORMOT REST文件上传 上传数据格式必须是:MULTIPART/FORM-DATA uses SynCommons 后端处理参照下列代码: 后端处理参照下列代码: procedure TWeb ...
- Mysql之Incorrect string value: '\xF0\x9F\x98\x89 \xE6... 保存emoji表情
错误信息如下: Incorrect string value: '\xF0\x9F\x98\x89 \xE6...' 问题产生的原因是字符串不兼容4字节的unicode导致的,一般我们常见的表情编码等 ...
- 命令行利用ffmpeg实现rtmp推流《转》
ffmpeg在以前介绍过,是一个相当强大的工具,我们这次利用它实现rtmp推流(最终推流地址统一为rtmp://127.0.0.1:1935/live/123). 1.首先下载ffmpeg和ffpla ...
- 大牛总结的MySQL锁优化【转】
MySQL 就是其中之一,它经历了多个版本迭代.数据库锁是 MySQL 数据引擎的一部分,今天我们就一起来学习 MySQL 的数据库锁和它的优化. MySQL 锁分类 当多个事务或者进程访问同一个资源 ...