当前位置:网站首页>第十五单元 分页、过滤
第十五单元 分页、过滤
2022-08-02 14:01:00 【czy1206527605】
一.分页
1.什么是分页
REST框架包括对可定制的分页样式的支持。
分页分为两种情况:
全局分页和局部分页
2.全局分页设置
全局配置信息放在setting里面
REST_FRAMEWORK = {
# 全局分页
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
# 指定分页引擎
'PAGE_SIZE': 2
# 指定页面大小
}
全局&局部分页的使用
http://127.0.0.1:8000/路由名/?page=数字
同时修改前端数据
解析数据后的data后加上.results
3.局部分页设置
导入分页器
from rest_framework.pagination import PageNumberPagination
使用
class GoodView(ModelViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
# 局部分页
pagination_class = PageNumberPagination
注意,使用时要把全局分页的
‘DEFAULT_PAGINATION_CLASS’:‘rest_framework.pagination.PageNumberPagination’,
进行注释,保留page行。要不然效果出不来
4.自定义分页器
使用
class GoodView(ModelViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
# 使用自定义分页器进行分页
pagination_class = pagination
pagination为自己定义的分页器
自定义分页器
class pagination(PageNumberPagination):
max_page_size = 3 # 一页最多显示多少条数据
page_size = 1 # 默认一页显示多少条数据
page_query_param = 'page' # 参数,用于指定第几页
page_size_query_param = 'size' # 参数,用于指定一夜显示多少条数据
自定义分页器的使用
http://127.0.0.1:8000/路由名/?page=数字&size=数字
page为分几页 size为每页分几条
二.过滤
1.django-filter的精准过滤
使用过滤之前要在setting里进行安装
全局过滤配置
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
局部精准过滤
1.导包
from django_filters.rest_framework import DjangoFilterBackend
2.使用
class GoodView(ModelViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
# 局部过滤
# 1.精准过滤
# filter_backends = [DjangoFilterBackend] # 指定过滤工具
# filter_fields = ['name','kind'] # 指定字段
2.django-filter的模糊过滤
局部模糊过滤
导入
import django_filters
自定义过滤器
class MyFilter(django_filters.rest_framework.FilterSet):
# 价格大于等于min_price
# NumberFilter对数值类型进行过滤 field_name过滤的字段 lookup_expr过滤的表达式
# gte 大于等于 lte 小于等于 icontains 不区分大小写的包含
min_price = django_filters.NumberFilter(field_name='price',lookup_expr='gte')
max_price = django_filters.NumberFilter(field_name='price',lookup_expr='lte')
# CharFilter 对字符串类型数据进行过滤
name = django_filters.CharFilter(field_name='name',lookup_expr='icontains')
# 元类
class Meta:
models = Goods # 指定模型类
fields = ['min_price','max_price','name'] # 指定过滤字段
指定过滤器
# filter_backends = [DjangoFilterBackend]
# filterset_class = MyFilter
3.rest_framework的SearchFilter
全局
setting里过滤引擎配置
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.SearchFilter']
}
局部
class GoodView(ModelViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
filter_backends = [SearchFilter] #指定过滤工具
# 如果需要使用外键字段进行搜索,使用 外键__外键字段 进行指定
search_fields = ['name','kind__id'] # 指定过滤字段 kind__id kind__kind_name
边栏推荐
猜你喜欢
Some impressions of the 519 plummet 2021-05-21
Data Organization---Chapter 6 Diagram---Graph Traversal---Multiple Choice Questions
Image retrieval method based on deep learning!
政策利空对行情没有长期影响,牛市仍将继续 2021-05-19
About the development forecast of the market outlook?2021-05-23
智能指针-使用、避坑和实现
redis分布式锁和看门狗的实现
网络安全第四次作业
【ONE·Data || 排序入门】
【Tensorflow】AttributeError: ‘_TfDeviceCaptureOp‘ object has no attribute ‘_set_device_from_string‘
随机推荐
关于市场后市的发展预测? 2021-05-23
音频处理:浮点型数据流转PCM文件
网络安全第六次作业
Geoffery Hinton:深度学习的下一个大事件
The world's largest Apache open source foundation is how it works?
logback源码阅读(一)获取ILoggerFactory、Logger
Minio文件上传
智能指针-使用、避坑和实现
关于C#使用DateTime数据的细节
Shell脚本完成pxe装机配置
What is the difference between web testing and app testing?
Swagger 的使用
【ONE·Data || 排序入门】
存储过程详解
打破文件锁限制,以存储力量助力企业增长新动力
WiFi Association & Omnipeek Packet Capture Analysis
Flask项目的完整创建 七牛云与容联云
Sentinel源码(五)FlowSlot以及限流控制器源码分析
Raft对比ZAB协议
瑞吉外卖笔记——第10讲Swagger