django: rest-framework的 分页和过滤
django: rest-framework的 分页和过滤
一. 分页
二. 过滤
一. 分页
rest-framework查询时候默认是不分页的, 除了手动计算查询的起始位置之外, rest-framework也提供了一些页码的设置功能.
- 方式1: 直接在setting里添加配置
在settings中rfw(rest-framework)的所有设置都在REST_FRAMEWORK字典中,(如果不设置将采用rfw的默认设置, 默认设置存放在rest-framework.settings中, 可以在此处查询设置的字段名, 防止拼写错误), 我们修改项目目录下的settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 10 # 这是每页显示的数目
}
- 1
- 2
- 3
- 4
完毕
此时通过restframe查询之时, 将以每页十条数据显示. 这种方式及其简单, 但是无法对url的页码参数进行’个性化’定制
- 方式2: 自定义分页(类):
自定义类需要重写PageNumberPagination, 可以自定义多个参数
from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'size'
page_query_param = 'p'
max_page_size = 100
- 1
- 2
- 3
- 4
- 5
- 6
- 7
重写后只需在类视图中指定即可
class GoodsListView(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
goods list
"""
...
pagination_class = StandardResultsSetPagination
- 1
- 2
- 3
- 4
- 5
- 6
- 7
此时的url变为:
http://localhost:8000/books/?p=3&size=3
- 1
二. 过滤
- 方式1: 简单设置
直接在视图指定filter_backends可以快速实现过滤的功能
from django_filters.rest_framework import DjangoFilterBackend
class GoodsListView(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
goods list
"""
...
filter_backends = (DjangoFilterBackend, ) # 过滤
filter_fields = ('name', 'shop_price') # 过滤的字段
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
此时通过浏览器访问, 右上角谁多出一个过滤器按钮, 点击即可过滤:

但是值得注意的是, 这种过滤方式不支持任何模糊搜索的, 必须完全一致才可以匹配到结果.
过滤时的url格式为
http://localhost:8000/books/?name=namss&shop_price=30
- 1
- 方式2: 自定义过滤器类
为了实现模糊搜索, 可以设置一个自定义的过滤器类, 并在视图中完成指定.
比如过滤价格区间:
import django_filters
from .models import Goods
class ProductFilter(django_filters.rest_framework.FilterSet):
'''商品的过滤类'''
# 比如此处我们进行价格的过滤
price_min = django_filters.NumberFilter(name="shop_price", lookup_expr='gte')
price_max = django_filters.NumberFilter(name="shop_price", lookup_expr='lt')
class Meta:
model = Goods
fields = ['price_min', 'price_max'] # 使之生效
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
当然, 也需要到视图中指定filter_class
from django_filters.rest_framework import DjangoFilterBackend
class GoodsListView(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
goods list
"""
...
filter_backends = (DjangoFilterBackend, ) # 过滤
# 自定义的过滤
filter_class = ProductFilter
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9

django: rest-framework的 分页和过滤的更多相关文章
- Django Rest framework 之 分页
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- django rest framework实现分页功能
在web开发中很多需求都需要实现分页功能,然而 Django Rest Framework 自带的分页功能,只能在 mixins.ListModelMixin and generics.Generic ...
- Django rest framework 之分页
Django rest_framework 中分页可分为三类: PageNumberPagination:看第 n 页,每页显示 n 条数据 LimitOffsetPagination:在 n 个位置 ...
- Django REST framework的分页
DRF分页组件 为什么要使用分页 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输 ...
- Django REST framework 之分页,视图,路由,渲染器
1.分页 2.视图 3.路由 4.渲染器 1.分页 方法一: from django.shortcuts import render from rest_framework.versioning im ...
- Django Rest framework 之 序列化
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django Rest framework 之 解析器
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django Rest framework 之 版本
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django Rest framework 之 节流
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django Rest framework 之 权限
django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) django res ...
随机推荐
- 【3】SpringMVC的Controller
1SpringMvc的Controller是线程安全的吗? (1)由于是单例,tomcat的多线程环境访问,属性必须是不可变的,如果可变,会产生脏数据,线程不安全 2Spring的事务管理 (1)ao ...
- 对Tornado异步操作Sqlalchemy方法的选定 不错
使用原因 在一个实时通讯的项目中,由于需要使用Websocket这一协议,便在Python框架中选定了Tornado,也同时使用了Sqlalchemy这一ORM框架. 大家都知道Tornado有异步非 ...
- 记录一下 C51 里的位运算
记录一下 C51 里的位运算 一篇上个世纪的文章<单片机的C语言中位操作用法>1 今天看到一个这样的运算,这相当于清了 XICFG. #define INT1IS1 0x80 #defin ...
- 浅谈对【OSI七层协议】的理解
我们每天都在上网冲浪,在这背后到底有那些设备.协议去支撑呢?ISO是[Open System Interconnection]的缩写,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本 ...
- Linux 应用层open调用驱动层open过程
内核版本:3.0.8 open.close.read.write.ioctl等等都是类似. ====================================================== ...
- 题目1539:师弟 ——最短路+DFS
题意::从起点到终点的所有的最短路中,找出离终点有X个路口的城市一共有几个 开始我用最短路+DFS从起点开始搜,超时了 换了一种方法,从终点开始搜,AC #include<stdio.h> ...
- Dobbo问题及解决方案:forbid-consumer
本地运行Dubbo经常出现以下情况: com.alibaba.dubbo.rpc.RpcException: Forbid consumer 10.0.53.69 access service com ...
- laravel 中条件查询 function模式
当需要条件查找时,可以使用下面的注入方法: //我要预约 yudoc_name yudoc_keshi yudoc_jibing yudoc_hospital 这是需要帅选的条件 public fun ...
- 【转】WINSOCKET客户端编程以及JMETER外部调用
1 public class SocketClient { 2 OutputStream clientout = null; 3 InputStream clienIn = null; 4 byte[ ...
- 【转】使用JMeter进行负载测试——终极指南
使用JMeter进行负载测试——终极指南 这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 ...