实现分页
- 在app的文件夹里创建一个pagination.py文件,写入一下代码:
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
class MyPageNumberPagination(PageNumberPagination):
page_size = 10 # 默认页数
page_size_query_param = 'size' # ?page=xx&size=??
max_page_size = 10 # 每页最大数据条数
def get_paginated_response(self, data):
return Response({
'status': True,
'links': {
'next': self.get_next_link(), # 上一页
'previous': self.get_previous_link() # 下一页
},
'count': self.page.paginator.count, # 总页数
'data': data # 要返回的数据
})
- 在视图类中添加分页类:
...
from .pagination import MyPageNumberPagination
class ResourceViewSet(viewsets.ModelViewSet):
# 用一个视图集替代ArticleList和ArticleDetail两个视图
queryset = ResourceDetail.objects.all()
serializer_class = ResourceDetailSerializer # 序列化类
pagination_class = MyPageNumberPagination # 添加分页类
分页可不在settings.py文件中设置REST_FRAMEWORK
实现过滤
- 安装django-filters库
pip install django-filters
- 在视图类中添加过滤后端和过滤参数
class ResourceViewSet(viewsets.ModelViewSet):
# 用一个视图集替代ArticleList和ArticleDetail两个视图
queryset = ResourceDetail.objects.all()
serializer_class = ResourceDetailSerializer
pagination_class = MyPageNumberPagination
# filter_fields = ['id', 'name']
filter_backends = [DjangoFilterBackend] # 过滤后端
filterset_fields = ['id', 'name'] # 过滤的参数
- 在settings.py文件中设置:
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
INSTALLED_APPS =[
...
'django_filters'
]
搜索时在url后加上?id=xxx或?name=xxx即可: