• 六、python Django REST framework GET参数处理[过滤、排序、分页]


    一、过滤

    解释:过滤其实就是应用于ListModelMixin其为所有内容对其进行过滤的,需要专门安装注册,如127.0.0.1:8000/books/?gid=88,在所有内容里面得到gid为88的内容

    1.基础(不推荐)

    安装:pip install django-filter

    配置:

    INSTALLED_APPS = [
        ...
        'django_filters',  # 需要注册应用,
    ]
    
    REST_FRAMEWORK = {
        'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
    }
    
    # 不写入到setting.py里面,写入到views.py视图里,写法如下
    # filter_backends = DjangoFilterBackend
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    使用:

    class TestGenericAPIView(ModelViewSet):
        queryset = Student.objects.all()
        serializer_class = StudentSerializer
        filterset_fields = ['id' ,'time', 'foreign_id']
    
    • 1
    • 2
    • 3
    • 4

    2.复杂操作

    二、排序

    解释:其是使用过滤的方法,其使用rest_framework过滤里面的排序

    使用:http://127.0.0.1:8000/tea/?ordering=-id # -号表示逆序,不加符号表示正序

    class TestGenericAPIView(ModelViewSet):
        queryset = Student.objects.all()
        serializer_class = StudentSerializer
    
        filter_backends = [OrderingFilter] # 这里不配置,就需要去setting.py里面配置
        ordering_fields = ('id', )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    三、分页

    基础分页类:

    • PageNumberPagination 简单分页器-普通的分页工作
    • 请求格式:http://127.0.0.1:8000/tea/?page=1&page_size=2# page表示第几页,page_size表示一页显示几个
      • page_size 每页数目(这里用来设置默认的,一般不用)
      • page_query_param 前端请求的页数关键字名,默认为"page"
      • page_size_query_param 前端请求的每页数目关键字名,默认为"page_size"
      • max_page_size 前端最多能设置的每页数量
    • LimitOffsetPagination 偏移分页器-可设置查询起点-其查询模式是PageNumberPagination 的基础
    • 请求格式:http://127.0.0.1:8000/tea/?limit=2&offset=2 # limit表示每次查多少,offset表示隔开几个开始查
      • default_limit 默认限制,默认值与page_size设置一样
      • limit_query_param limit参数名,默认’limit’
      • offset_query_param offset参数名,默认’offset’
      • max_limit 最大limit限制

    使用方法:

    解释:如果配置全局就无需专门写入局部配置,同理配置局部无需专门写入全局,理由(django在APIView父类里面默认会读取全局配置的,如果局部写相当于覆盖全局配置)

    • 全局配置(不推荐):
      • 写入setting.py文件
    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE': 100  # 每页数目
    }
    
    • 1
    • 2
    • 3
    • 4
    • 局部配置:
      • 写入views.py
        导入:from rest_framework.pagination import PageNumberPagination
    class LargeResultsSetPagination(PageNumberPagination):
        page_size = 2
        page_size_query_param = 'page_size'
        max_page_size = 2
    
    • 1
    • 2
    • 3
    • 4
    class TestGenericAPIView(ModelViewSet):
        queryset = Student.objects.all()
        serializer_class = StudentSerializer
        pagination_class = LargeResultsSetPagination
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    多燕瘦X《披荆斩棘》:BFB集团破圈传播健康科学理念
    前端三剑客 HTML+CSS+JavaScript ② HTML相关概念
    python对于grpc的简单操作(二)
    大一学生作品《前端框架开发技术》 期末网页制作 HTML+CSS+JavaScript 个人主页网页设计实例
    链表经典算法题目
    【git】一台电脑连接管理多个git账号
    Day04-GET和POST请求
    我们总结了弹性伸缩的五个条件与六个教训
    【OpenEVSE 】汽车充电桩控制项目解析
    net core 程序 发布到 docker 中
  • 原文地址:https://blog.csdn.net/weixin_46765649/article/details/126329404