分页
全局分页
需要修改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]