zoukankan      html  css  js  c++  java
  • DRF中限流、过滤、排序、分页

    1.限流

    settings.py中配置

    REST_FRAMEWORK = {
        #   限流(防爬虫)
        'DEFAULT_THROTTLE_CLASSES': [
            'rest_framework.throttling.AnonRateThrottle',
            'rest_framework.throttling.UserRateThrottle',
        ],
        #   限流策略
        'DEFAULT_THROTTLE_RATES': {
            'user': '3/hour',  # 每小时3次
            'anon': '100/day',  # 每天能访问100次
        },
    
    }
    

    2.过滤

    2.1在settings.py中配置

    REST_FRAMEWORK = {
        #   限流(防爬虫)
        'DEFAULT_THROTTLE_CLASSES': [
            'rest_framework.throttling.AnonRateThrottle',
            'rest_framework.throttling.UserRateThrottle',
        ],
        #   限流策略
        'DEFAULT_THROTTLE_RATES': {
            'user': '1000/hour',  # 每小时100次
            'anon': '1000/day',  # 每天能访问3次
        },
    
        #   过滤器后端
        'DEFAULT_FILTER_BACKENDS': [
            'django_filters.rest_framework.DjangoFilterBackend',
            # 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化
        ],
    
    
    
    
    }
    
    

    2.2在serializers.py序列化

    rom .models import *
    from .views import *
    from rest_framework import serializers
    
    class ActorSerializers(serializers.ModelSerializer):
        class Meta:
            model = Actor   
            fields = '__all__'
            depth = 1           #外键序列化
    

    2.3views.py

    from rest_framework.viewsets import ModelViewSet
    from .models import *
    from .serializers import *
    
    from django_filters.rest_framework import DjangoFilterBackend
    
    
    class ActorModelView(ModelViewSet):
        queryset = Actor.objects.all()
        serializer_class = ActorSerializers
    
        #   过滤
        filter_backends = (DjangoFilterBackend)
        #   过滤的字段
        filter_fields = ('name', 'phone')
    
    • Postman测试


    3.排序

    3.1在settings.py中配置

    REST_FRAMEWORK = {
        #   限流(防爬虫)
        'DEFAULT_THROTTLE_CLASSES': [
            'rest_framework.throttling.AnonRateThrottle',
            'rest_framework.throttling.UserRateThrottle',
        ],
        #   限流策略
        'DEFAULT_THROTTLE_RATES': {
            'user': '1000/hour',  # 每小时100次
            'anon': '1000/day',  # 每天能访问3次
        },
    
        #   过滤器后端
        'DEFAULT_FILTER_BACKENDS': [
            'django_filters.rest_framework.DjangoFilterBackend',
            # 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化
        ],
    
        # 5.1过滤排序(全局):Filtering 过滤排序
        'SEARCH_PARAM': 'age',
        'ORDERING_PARAM': 'ordering',
    
        'NUM_PROXIES': None,
    }
    

    3.2在serializers.py序列化

    rom .models import *
    from .views import *
    from rest_framework import serializers
    
    class ActorSerializers(serializers.ModelSerializer):
        class Meta:
            model = Actor   
            fields = '__all__'
            depth = 1           #外键序列化
    

    2.3views.py

    from rest_framework.viewsets import ModelViewSet
    from .models import *
    from .serializers import *
    
    from django_filters.rest_framework import DjangoFilterBackend
    from rest_framework.filters import OrderingFilter
    
    
    
    class ActorModelView(ModelViewSet):
        queryset = Actor.objects.all()
        serializer_class = ActorSerializers
    
        #   支持过滤 与 排序
        filter_backends = (DjangoFilterBackend, OrderingFilter)
        #   过滤的字段
        filter_fields = ('name', 'phone')
        #   排序的字段
        ordering_fields = ('id', 'age')
    
    • Postman测试


    4.分页

    3.1在settings.py中配置

    REST_FRAMEWORK = {
        #   限流(防爬虫)
        'DEFAULT_THROTTLE_CLASSES': [
            'rest_framework.throttling.AnonRateThrottle',
            'rest_framework.throttling.UserRateThrottle',
        ],
        #   限流策略
        'DEFAULT_THROTTLE_RATES': {
            'user': '1000/hour',  # 每小时100次
            'anon': '1000/day',  # 每天能访问3次
        },
    
        #   过滤器后端
        'DEFAULT_FILTER_BACKENDS': [
            'django_filters.rest_framework.DjangoFilterBackend',
            # 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化
        ],
    
        # 5.1过滤排序(全局):Filtering 过滤排序
        'SEARCH_PARAM': 'age',
        'ORDERING_PARAM': 'ordering',
    
        'NUM_PROXIES': None,
    }
    

    3.2在serializers.py序列化

    rom .models import *
    from .views import *
    from rest_framework import serializers
    
    class ActorSerializers(serializers.ModelSerializer):
        class Meta:
            model = Actor   
            fields = '__all__'
            depth = 1           #外键序列化
    

    2.3views.py

    from rest_framework.viewsets import ModelViewSet
    from .models import *
    from .serializers import *
    
    from django_filters.rest_framework import DjangoFilterBackend
    from rest_framework.filters import OrderingFilter
    from rest_framework.pagination import PageNumberPagination
    
    
    
    #   局部自定义分页
    class PageNum(PageNumberPagination):
        #   代表每页返回数据数量的参数,默认值: None
        page_size_query_param = 'page_size'
        #   代表页码的参数,默认值: page
        page_query_param = 'page'
        #   一页中最多显示的条数
        # max_page_size = 2
        #   每页显示条数
        page_size = 2
    
    
    class ActorModelView(ModelViewSet):
        queryset = Actor.objects.all()
        serializer_class = ActorSerializers
    
        #   分页
        pagination_class = PageNum
        #   过滤 与 排序
        filter_backends = (DjangoFilterBackend, OrderingFilter)
        #   过滤的字段
        filter_fields = ('name', 'phone')
        #   排序的字段
        ordering_fields = ('id', 'age')
    
    • Postman测试

  • 相关阅读:
    IOS-UI- UIScrollView 滚动视图(1)
    git实用攻略(二)
    git实用攻略
    一些技术发展和职业规划的建议
    Spring Data JPA 事务
    配置Slf4j依赖,桥接各种多个日志组件(排除commons-logging依赖的影响)
    Apache Shiro去掉URL中的JSESSIONID
    浏览器缓存介绍之sessionStorage、localStorage、Cookie
    【转】大数据批处理框架 Spring Batch全面解析
    ssl和https协议详解
  • 原文地址:https://www.cnblogs.com/mbitions/p/13892741.html
Copyright © 2011-2022 走看看