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 ...
随机推荐
- Oracle创建实例
1.打开database configuration assistant 2.下一步 3.下一步 4.完成 5.添加完密码后,点击关闭.
- bzoj 1004 [HNOI2008]Cards && poj 2409 Let it Bead ——置换群
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1004 http://poj.org/problem?id=2409 学习材料:https:/ ...
- erlang热部署
以下流程参考rebar的wiki,亲测 rebar的版本一定要注意,高版本对于下面两个指令有bug rebar generate-appups rebar generate-upgrade 经过一个个 ...
- Manager Test and DAO
1. 阅读ManagerTest代码 (1)代码 import java.util.* package test; /** * This program demonstrates inheritanc ...
- 【转】JMeter Tutorial的安装和具体操作
1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为2.9,其余文件如源代码等也可从如下官网下载: http://jm ...
- 【转】配置Jmeter的自定义参数
配置Jmeter的自定义参数 User Defined Variables 在这个控件中,定义你所需要的参数,如 在对应的需要使用参数的位置,使用${host}替代. 应用场景: 当测试环境变化时,我 ...
- 网络监控之一:netstat命令
netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP ...
- thinkphp模板中for循环与switch的使用
1.for用法 <for start="开始值" end="结束值" comparison="" step="步进值&quo ...
- mysql 启动卡主,cpu 100%
[mysql@mysqlhq scripts]$ cat /etc/redhat-release Kylin Linux release 3.3.1707 (Core) mysql version S ...
- 011. Python中*args, **kwargs 和 pass 和self 解释
*args, **kwargs →在python都表示可变参数, *args表示任意多个任意类型无名参数, 是一个元组; **kwargs表示关键字参数(key/value参数), 是一个字典,接收的 ...