drf过滤、排序、分页器drf内置的排序、过滤功能使用1234567891011121314使用的话十分的简单from rest_framework.filters import OrderingFilter, SearchFilter 导入这两个类,在可以进行查询的接口中进行一定的配置即可#过滤功能 filter_backends = [SearchFilter,] search_fields=('name',) # 表中的字段,会去表中该字段进行匹配路径中的写入方式 http://127.0.0.1:8000/students/?search=e # 只能写search #排序功能 filter_backends = [OrderingFilter] ordering_fields = ('price', 'id') #表中的字段,可以以这些字段进行排序路径中的书写方式 http://127.0.0.1:8000/students/?ordering=-age # 必须写ordering django-filter的使用123456781.先下载django-filter2.导入类 from django_filters.rest_framework import DjangoFilterBackend3.在视图类中进行配置 filter_backends = [DjangoFilterBackend] filter_fields = ('name', 'price') #模型中的字段,以这些为查询条件4.路径中的参数 http://127.0.0.1:8000/book/?name=西游记 #为精准匹配,不是模糊查询 自定义过滤器12345671.导入基类 from rest_framework.filters import BaseFilterBackend2.继承并重写他的filter_queryset方法 def filter_queryset(self, request, queryset, view): return queryset #必须返回一个queryset对象3.直接在视图类里使用 filter_backends = [Myfilter.MyFilter] drf分页器的使用1234567891011121314151617181920212223242526272829303132333435363738drf为我们提供了3种分页器1.PageNumberPagination 我们可以新建一个类然后继承该类,然后在该类中添加4个属性 page_size = 1 # 每页显示多少条 page_query_param = 'page' # 查询参数 eg:http://127.0.0.1:8000/book/?page=1 page_size_query_param = 'size' # 查询的时候你按什么名称来指定每页显示多少条 eg:http://127.0.0.1:8000/book/?size=3 # 指定每页显示3条,不指定按默认之前配的page_size来 max_page_size = 10 # 每页最多显示多少条 2.LimitOffsetPagination default_limit = 2 # 默认条数 limit_query_param = 'limit' # 查询时,指定查询多少条 offset_query_param = 'offset' # 查询时,指定的起始位置是哪 max_limit = None # 查询时,最多返回多少条3.CursorPagination cursor_query_param = 'cursor' # 查询的时候,指定的查询方式 page_size = 2 # 每页显示多少条 ordering = '-created' # 排序方式 page_size_query_param = 'size' # 查询的时候指定每页显示多少条 max_page_size = None #每页最多显示多少条使用方式在视图类中添加 pagination_class = MyPage 7 APIView的分页模式-新建一个类,继承普通分页,重写四个属性-视图类写法如下class StudentApiView(APIView): def get(self,request): student_list=Student.objects.all() page=MyPageNumberPagination()# 实例化得到对象 # 只需要换不同的分页类即可 res=page.paginate_queryset(student_list,request,self)# 开始分页 ser=StudentSerializer(res,many=True) return page.get_paginated_response(ser.data) # 返回数据