zoukankan      html  css  js  c++  java
  • ModelViewSet里过滤,排序,分页,序列化设置

    限流Throttling

    可以对接口访问的频次进行限制,以减轻服务器压力。

    使用

    可以在配置文件中,使用 DEAULT_THROTTLE_CLASSDEFAULT_THROTTLE_RATES进行全局配置,

    REST_FRAMEWORK = {
        'DEFAULT_THROTTLE_CLASSES': (
            'rest_framework.throttling.AnonRateThrottle',
            'rest_framework.throttling.UserRateThrottle',
        ),
        'DEFAULT_THROTTLE_RATES': {
            'anon': '100/day',
            'user': '1000/day'
        },
    }
    
    

    DEFAULT_THROTTLE_RATES 可以使用 second,minute.hour 或 day来实名周期

    过滤Filtering

    对于列表数据可能需要根据字段进行过滤,我们可以通过django-fitlter扩展来增强支持

    pip install django-filter
    

    在配置文件总增加过滤后端的设置:

    INSTALLED_APPS=[
    	....
    	'django_filters'
    ]
    REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS':('django_filters.rest_framework.DjangoFilterBackend',)
    }
    
    

    在视图中添加filter_fields属性,指定可以过滤的字段

    class BookLIstView(ListAPIView):
    		queryset=BookInfo.objects.all()
    		serializer_class=BookInfoSerializer
    		filter_fields=('btitle','bread')
    #127.0.0.1:8000/books/?btitle='西游记'
    

    排序

    对于列表数据,REST framewotk提供了ORderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序

    使用方法:

    在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter过滤器,REST

    framework会在请求的查询字符串参数中检查是否包含了ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。

    前端可以传递的ordering参数的可选字段值需要在ordering_fields中指明。

    class BookListView(ListAPIView ):
    		queryset = BookInfo.objects.all()
    		serializer_class = BookInfoSerializer
    		filter_backends = [orderingFilter]
    		ordering_fields = ( 'id ', 'bread ' , 'bpub_date' )
    #127.0.0.1:8000/books/ ?ordering=-bread
    

    分页PageNumberPagination

    前端访问网址形式:

    GET http://api.example.org/books/?page=4
    

    可以在子类中定义的属性:

    • page_size 每页数目

    • page_query_param 前端发送的页数关键字名,默认为"page"

    • page_size_query_param 前端发送的每页数目关键字名,默认为None

    • max_page_size 前端最多能设置的每页数量

    from rest_framework.pagination import PageNumberPagination
    
    class StandardPageNumberPagination(PageNumberPagination):
        page_size_query_param ='page_size'
        max_page_size=10
        
    class BookListView(ListAPIView):
        queryset = BookInfo.objects.all().order_by('id')
        serializer_class = BookInfoSerializer
        pagination_class = StandardPageNumberPagination
        
    # 127.0.0.1/books/?page=1&page_size=2
    
  • 相关阅读:
    ubuntu 16.04 安装显卡驱动,再安装cuda
    8. golang 基本类型转换
    7.golang的字符串 string
    5. 变量定义
    4. 代码规范
    3.golang 的注释
    1.windows server 201x
    exec 命令
    powershell
    1.Dockerfile
  • 原文地址:https://www.cnblogs.com/li-xiao-yang/p/13893666.html
Copyright © 2011-2022 走看看