分页、过滤,排序、限流

分页

全局分页

需要修改Django的全局配置文件 settings.py
在文件最后添加

REST_FRAMEWORK = {
    #全局分页
    # 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    # 'PAGE_SIZE': 2    #每页展示几条数据
}

drf局部分页设置

在指定的视图类里添加局部分页

class Goodset(ModelViewSet):
    queryset = Goods.objects.all() #查询集
    serializer_class = Goodsser  #序列化器
    #局部分页
    # pagination_class = PageNumberPagination #全局分页的'PAGE_SIZE': 2 不能注释
    #也可以在网址后边加 /?page=2&size=2  查询第2页,每页2条的英雄信息

自定义分页

#导包
from rest_framework.pagination import PageNumberPagination
#自定义分页类
class pagiation(PageNumberPagination):
    max_page_size = 3 #一页最多显示多少数据
    page_size = 2  #默认一页显示多少条数据
    page_query_param = 'page' #参数,用于指定第几页
    page_size_query_param = 'size'     #参数,用于指定一页显示多少条数据

class Goodset(ModelViewSet):
    queryset = Goods.objects.all()
    serializer_class = Goodsser

    #使用自定义分页器进行分页
    # pagination_class = pagiation

过滤

安装插件

在黑窗口安装输入
pip install django-filter

注册app

在settings.py文件中注册
INSTALLED_APPS = [

‘django_filters’,

]

配置过滤引擎

在settings.py文件中最后添加

REST_FRAMEWORK = {
	#全局过滤  如果用到局部过滤这一代码可以注释
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}

精准过滤&模糊过滤

精准过滤
FilterSet`将自动为给定的字段创建一个类,并允许您发出如下请求:
http://127.0.0.1:8000/good/?name=可口可乐&kind=1(编号)

#导包
from django_filters.rest_framework import DjangoFilterBackend
class Goodset(ModelViewSet):
    queryset = Goods.objects.all()
    serializer_class = Goodsser
    #局部过滤
    # 1.准确查询
    # filter_backends = [DjangoFilterBackend] #指定过滤工具
    # filter_fields=['name','kind'] #指定准确查询的字段名

模糊过滤
FilterSet`将自动为给定的字段创建一个类,并允许您发出如下请求:
http://127.0.0.1:8000/good/?max_price=2&good_name=可

#导包
from django_filters.rest_framework import DjangoFilterBackend
import django_filters
#自定义过滤器类
class MyFilter(django_filters.rest_framework.FilterSet):
    #价格大于等于等于min_price  lte表示小于等于
    #NumberFilter对数值类型进行过滤 field_name过滤的字段 lookup_expr过滤的表达式
    min_price=django_filters.NumberFilter(field_name='price',lookup_expr='get')
    max_price=django_filters.NumberFilter(field_name='price',lookup_expr='lte')
    #CharFilter 对字符串数据进行过滤
    # icontains 表示包含
    good_name=django_filters.CharFilter(field_name='name',lookup_expr='icontains')
    #元类
    class Meta:
        model=Goods
        fields=['min_price','max_price','good_name']

class Goodset(ModelViewSet):
    queryset = Goods.objects.all()
    serializer_class = Goodsser
    # 2.模糊查询
    filter_backends = [DjangoFilterBackend]  # 指定过滤工具
    filterset_class=MyFilter  #指定模糊查询的自定义过滤器

rest_framework的SearchFilter

配置搜索引擎

在settings.py文件中最后添加

REST_FRAMEWORK = {
	#全局过滤  如果用到局部过滤这一代码可以注释
    'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.SearchFilter']
}

serch fielter 模糊查询
这将允许客户端通过执行以下查询来过滤列表中的项目:
http://127.0.0.1:8000/good/?search=可 1

#导包
from rest_framework.filters import SearchFilter
class Goodset(ModelViewSet):
    queryset = Goods.objects.all()
    serializer_class = Goodsser
    # 3.serch fielter 模糊查询
    filter_backends = {SearchFilter} #指定过滤工具
    #如果使用外键字段进行搜索,使用外键__外键字段 进行指定
    search_fields=['name','kind__id']

排序

Ordering-Filter的使用

http://127.0.0.1:8000/good/?ordering=-price # 从大到小
http://127.0.0.1:8000/good/?ordering=price # 从小到大

#导包
from rest_framework.filters import OrderingFilter
class Goodset(ModelViewSet):
    queryset = Goods.objects.all()
    serializer_class = Goodsser
    filter_backends = {OrderingFilter} #指定排序工具
    # 指定排序的字段
    ordering_fields=['price','number']

限流

在settings.py文件中最后添加

REST_FRAMEWORK = {
	#全局限流
    # 'DEFAULT_THROTTLE_CLASSES': (
    #     # 限制所有匿名未认证用户,使用IP区分用户
    #     'rest_framework.throttling.AnonRateThrottle',
    # ),
    'DEFAULT_THROTTLE_RATES': {
        # 可以使用 second, minute, hour 或day来指明周期
        'anon': '3/minute',
    }

视图类里实现

#导包
from rest_framework.throttling import AnonRateThrottle
class Goodset(ModelViewSet):
    queryset = Goods.objects.all()
    serializer_class = Goodsser
    #局部限流
    throttle_classes = [AnonRateThrottle]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值