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测试

  • 相关阅读:
    js中父窗口获得模态窗口的返回值
    Jquery获取控件值实例(转载)
    各种类库网址学习
    IIS启动网站时, 提示: “另一个程序正在使用此文件,进程无法访问”
    查看端口占用情况
    顽固的换行问题
    mac上共享android手机屏幕软件
    关于软键盘弹出的问题
    mac搭建android studio开发环境
    C语言位域和大小端
  • 原文地址:https://www.cnblogs.com/mbitions/p/13892741.html
Copyright © 2011-2022 走看看