1.分页
1.1 drf全局分页设置
在setting.py里进行全局分页配置
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 2
}
1.2 drf局部分页设置
全局和分页配置两者二选其一
from rest_framework.pagination import PageNumberPagination
class StuView(ModelViewSet):
queryset = Student.objects.all()
serializer_class = StuSerializer
# 局部分页
pagination_class = PageNumberPagination
# 使用自定义分页器进行分页
pagination_class = pagination
1.3 drf自定义分页类对象重写分页属性
from rest_framework.pagination import PageNumberPagination
class pagination(PageNumberPagination):
# 一页最多显示多少条数据
max_page_size = 3
# 默认一夜显示多少条数据
page_size = 1
# 参数,用于指定第几页
page_query_param = 'page'
# 参数,用于指定一页显示多少条数据
page_size_query_param = 'size'
2.过滤
2.1 django-filter的精准过滤
在命令窗口(黑窗口)安装
pip install django-filter
在setting.py文件里进行配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'student',
'django_filters' #注册APP
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS'['django_filters.rest_framework.DjangoFilterBackend']
# 配置过滤引擎
}
进行过滤
from django_filters.rest_framework import DjangoFilterBackend
class StuView(ModelViewSet):
queryset = Student.objects.all()
serializer_class = StuSerializer
# 指定过滤工具
# 1、精准过滤
filter_backends = [DjangoFilterBackend]
# 过滤的字段
filter_fields = ['name','province']
2.2 django-filter的模糊过滤
import django_filters
class MyFilter(django_filters.rest_framework.FilterSet):
# 成绩大于min_score NumberFilter对数值及逆行过滤 lookup_expr过滤的表达式
# gte 大于等于 lte 小于等于 icontains 不区分大小写包含
min_score = django_filters.NumberFilter(field_name='score',lookup_expr='gte')
max_score = django_filters.NumberFilter(field_name='score',lookup_expr='lte')
# CharFilter 对数据类型进行过滤
good_name = django_filters.CharFilter(field_name='name',lookup_expr='icontains')
class Meta:
model = Student
fields = ['min_score','max_score','good_name']
class StuView(ModelViewSet):
queryset = Student.objects.all()
serializer_class = StuSerializer
# 2.模糊过滤
filter_backends = [DjangoFilterBackend]
filterset_class = MyFilter
2.3 rest_framework的SearchFilter
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.SearchFilter']
}
from rest_framework.filters import SearchFilter
class StuView(ModelViewSet):
queryset = Student.objects.all()
serializer_class = StuSerializer
#3、search filter
filter_backends = [SearchFilter]
search_fields = ['name','province__pro_name']
3. 错误及解决方法
注意写代码的时候一定要看清楚字母的前后位置,不要写错单词,前后不对应