GenericAPIView为APIView的子类,它拓展了过滤、查询、分页的功能,本章主要介绍过滤的使用方法
一、引入方式
from rest_framework.generics import GenericAPIView
二、GenericAPIView
- 视图继承GenericAPIView
 - 往往要指定queryset类属性,表示当前接口需要使用到的查询集(查询集对象)
 - 往往要指定serializer_class类属性,表示当前接口需要使用到的序列化器类
 - 在对应的请求方法中,使用self.get_queryset()方法,获取查询集对象,建议不要直接使用self.queryset
 - 可以使用self.get_serializer()方法调用序列化器类 ```python from rest_framework.response import Response from rest_framework import status from rest_framework.generics import GenericAPIView from .models import Projects from .serializers import ProjectsModelSerializer
 
class ProjectsPage(GenericAPIView): ‘’’ 类视图 ‘’’ queryset = Projects.objects.all() serializer_class = ProjectsModelSerializer
def get(self, request):qs = self.get_queryset()serializer_obj = self.get_serializer(instance=qs, many=True)return Response({'code': 0, 'res': "success", 'msg': serializer_obj.data}, status=status.HTTP_200_OK)
<a name="wnmTs"></a>
## 三、过滤
<a name="blogTitle3"></a>
### 1.安装django-filter第三方库
```python
pip install -i https://pypi.douban.com/simple django-filter
2.配置django-filter
在项目下的settings.py模块中全局指定过滤引擎
INSTALLED_APPS = [
    'django_filters'
]
3.引入方式
from django_filters.rest_framework import DjangoFilterBackend
4.使用方法
a.在视图中指定过滤引擎,也可以在全局指定
1)视图中指定,如果要指定多个引擎,直接继续添加到该列表中
filter_backends = [DjangoFilterBackend]
2)全局指定 这种方式生效于所有视图
在项目下的settings.py模块下的REST_FRAMEWORK中设置属性
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': 'django_filters.rest_framework.backends.DjangoFilterBackend'
}
b.指定需要过滤的字段,过滤的字段需要与模型类中的字段保持一致
filterset_fields = ['name', 'leader', 'programmer', 'tester']
c.调用self.filter_queryset()方法,传递一个查询集对象,并返回一个查询集
from rest_framework.response import Response
from rest_framework import status
from rest_framework.generics import GenericAPIView
# from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
from .models import Projects
from .serializers import ProjectsModelSerializer
class ProjectsPage(GenericAPIView):
    '''
    类视图
    '''
    queryset = Projects.objects.all()
    serializer_class = ProjectsModelSerializer
    # 在视图类中指定过滤引擎 or 在settings下的REST_FRAMEWORK设置全局指定
    filter_backends = [OrderingFilter]
    filterset_fields = ['name', 'leader', 'programmer', 'tester']
    def get(self, request):
        qs = self.get_queryset()  # 使用get_queryset()获取查询集对象
        qs = self.filter_queryset(qs)  # 使用filter_queryset过滤查询集
        serializer_obj = self.get_serializer(instance=qs, many=True)
        return Response({'code': 0, 'res': "success", 'msg': serializer_obj.data}, status=status.HTTP_200_OK)
采坑记录
不要使用django中的filters,不然会报classnotfound
from rest_framework.filters import OrderingFilter
# 注意不要引用django中的filters
前端访问
url为 url+ ?关键字段
