• django rest framework 过滤 lim分页


    一.过滤

    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 = BookSerializer
    
        filter_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 = Book
            fields = ["min_price", "max_price", "name"]

    BookViews

    class BookView(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
    
        filter_backends = (DjangoFilterBackend,)
        # 自定义过滤类
        filter_class = ProductFilter

     LimitOffset分页

    引入模块

    from rest_framework.pagination import LimitOffsetPagination

    输入代码

    class P1(LimitOffsetPagination):
        max_limit = 3
        default_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 = BookSerializer
    
        filter_backends = (DjangoFilterBackend,)
        # 自定义过滤类
        filter_class = ProductFilter
    
        filter_fields = ('title', 'price')
        # pagination_class = MyPageNumberPagination
    
        # authentication_classes = [UserAuth]
        # permission_classes = [UserPerm]
  • 相关阅读:
    HDFS文件系统上传时序图 PB级文件存储时序图
    HDFS 文件系统流程图。PB级文件存储时序图。
    HBase 1.1.2 优化插入 Region预分配
    InputStream、OutputStream
    StringBuffer_StringBuilder
    java中的字符串
    升级的三个因素
    装饰设计模式
    IO字符流之读写缓冲区(BufferedWriter、BufferedReader)
    IO(FileWriter/FileReader)字符流:文件的写入、续写、读
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10117613.html
Copyright © 2020-2023  润新知