一.过滤
1.首先引用diango 自带的过滤配置
2.导入模块
from django_filters.rest_framework import DjangoFilterBackend from django_filters import rest_framework as filters
3.一种简单的过滤:
class BookView(ModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializerfilter_backends = (DjangoFilterBackend,)filter_fields = ('title', 'price')
通过在浏览器后面带上?price=100, 就可以精确过滤
自定义过滤
通过自己创建的过滤类来实现自定义过滤
class ProductFilter(filters.FilterSet):# 最小min_price = filters.NumberFilter(field_name="price", lookup_expr="gte")# 最大max_price = filters.NumberFilter(field_name="price", lookup_expr="lte")# 包含name = filters.CharFilter(field_name="title", lookup_expr="icontains")# 通过?字段自定义过滤class Meta:model = Bookfields = ["min_price", "max_price", "name"]
BookViews
class BookView(ModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializerfilter_backends = (DjangoFilterBackend,)# 自定义过滤类filter_class = ProductFilter
LimitOffset分页
引入模块
from rest_framework.pagination import LimitOffsetPagination
输入代码
class P1(LimitOffsetPagination):max_limit = 3default_limit = 2# 从offset开始访问的下几个limit_query_param = "limit"# 定义从表中的offset开始计算offset_query_param = "offset"class IndexView2(APIView):def get(self, request, *args, **kwargs):user_list = Book.objects.all()p1=P1()page_user_list = p1.paginate_queryset(queryset=user_list, request=request, view=self)print("打印的数据", page_user_list)ser = BookSerializer(instance=page_user_list, many=True)# return Response(ser.data)# 自带分页return p1.get_paginated_response(ser.data)class BookView(ModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializerfilter_backends = (DjangoFilterBackend,)# 自定义过滤类filter_class = ProductFilterfilter_fields = ('title', 'price')# pagination_class = MyPageNumberPagination# authentication_classes = [UserAuth]# permission_classes = [UserPerm]