drf分页组件补充
drf偏移分页组件
pahenations.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
- # 只使用limit结合ordering可以实现排行前几或后几
- # ?ordering=-price&limit=2 => 价格前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游标分页组件(了解)
pahenations.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
自定义过滤器
- # 自定义过滤器,接口:?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]
过滤器插件:django-filter
安装
- >: pip3 install django-filter
过滤条件层:自定义api/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 分页组件
Django Rest Framework 分页组件 DRF的分页 为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直 ...
- DRF分页组件
为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来, 这样会给内存造成特别大的压力,有可能 ...
- drf框架 - 过滤组件 | 分页组件 | 过滤器插件
drf框架 接口过滤条件 群查接口各种筛选组件数据准备 models.py class Car(models.Model): name = models.CharField(max_length=16 ...
- drf-过滤组件|分页组件|过滤器
目录 drf-过滤组件|分页组件|过滤器 群查接口各种筛选组件数据准备 drf过滤组件 搜索过滤组件 | SearchFilter 案例: 排序过滤组件 | OrderingFilter 案例: dr ...
- drf框架中分页组件
drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...
- DRF框架(八)——drf-jwt手动签发与校验、搜索过滤组件、排序过滤组件、基础分页组件
自定义drf-jwt手动签发和校验 签发token源码入口 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口,不然进不了登录页面 获取提交的username ...
- DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter
drf偏移分页组件 paginations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOf ...
- drf-jwt手动签发与校验,drf小组件:过滤、筛选、排序、分页
复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleR ...
- drf偏移分页组件-游标分页-自定义过滤器-过滤器插件django-filter
drf偏移分页组件 LimitOffsetPagination 源码分析:获取参数 pahenations.py from rest_framework.pagination import Limit ...
随机推荐
- header() 被用来发送自定义的 HTTP 报文
header() 被用来发送自定义的 HTTP 报文.关于HTTP报文的更多信息请参考» HTTP/1.1 specification. 请注意一点header()必须在任何实际输出之前调用,不管是普 ...
- mysql安装完之后,登陆后发现只有两个数据库
mysql安装完之后,登陆后发现只有两个数据库:mysql> show databases;+--------------------+| Database |+------ ...
- 怎样在 Akka Persistence 中实现分页查询
在 Akka Persistence 中,数据都缓存在服务内存(状态),后端存储的都是一些持久化的事件日志,没法使用类似 SQL 一样的 DSL 来进行分页查询.利用 Akka Streams 和 A ...
- Mac系统下查看Android studio默认debug签名与正式签名的SHA1值
https://blog.csdn.net/weixin_32364917/article/details/80095063 获取默认debug签名SHA1值方法,也可以直接打开系统的终端 输入: k ...
- 国产手机早就异军突起,为何还是有很多人“迷恋”iPhone?
近几年,国产手机不论是从外观上还是设计上,以及销量上都比前有了长足的进步,手机的品质和售后也在不断提升.这也让中国手机厂商不断的推出了拥有自己品牌特色的产品.特别是2018年不少国产手机品牌的旗舰级产 ...
- 简单的tab栏切换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- visual studio2019下静态链接库的制作
创建静态库项目 项目名称为20199324lib // pch.h #ifndef __PCH__ #define __PCH__ extern int add(int a, int b);//ext ...
- ASP.NET core MVC动作过滤器执行顺序
using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Threading.Tasks; namespace dotnet ...
- maven坐标 加速下载
<repositories> <repository> <id>aliyun</id> <name>aliyun</name> ...
- gitlab安装教程
gitlab安装教程 安装教程 官网安装方法 https://about.gitlab.com/downloads/#centos7 1.准备 sudo yum install curl po ...