一.過濾
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]
?