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

  • 相关阅读:
    DNS智能解析的搭建与配置
    使用dnsmasq快速搭建内网DNS
    安装Fedora 21工作站后要做的10件事情
    MySQL + KeepAlived + LVS 单点写入主主同步高可用架构实验
    SOC-EDS之DS5安装和破解
    vs2015安装与卸载
    opencv实现的图像缩放
    基于Haar+Adaboost的人脸识别
    win10+python3.7+Anaconda3+CUDA10.0+cuDNN7.5+tensorflow_gpu1.13.1+opencv4.1.0 教程(最新)
    图片合成视频
  • 原文地址:https://www.cnblogs.com/mbitions/p/13892741.html
Copyright © 2011-2022 走看看