zoukankan      html  css  js  c++  java
  • rest-framework之频率控制

    1、频率简介

    为了控制用户对某个url请求的频率,比如,一分钟以内,只能访问三次;


    2、内置频率类使用

    局部使用

    views.py

    from django.shortcuts import render
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework.throttling import SimpleRateThrottle
    
    # Create your views here.
    # 第一步,写一个频率类,继承SimpleRateThrottle
        # 重写get_cache_key, 返回self.get_iden(request)
        # 一定要记住配置一个scop=字符串
    # 第二步:在setting中配置
    class Throttle(SimpleRateThrottle):
        scope = 'lxx'
        def get_cache_key(self, request, view):
            return self.get_ident(request)
    
    
    class Books(APIView):
        throttle_classes = [Throttle]  # 局部使用频率类
        def get(self, request):
            return Response('')


    urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^books/', views.Books.as_view()),
    ]


    settings.py设置

    REST_FRAMEWORK = {
        'DEFAULT_THROTTLE_RATES':{
            # key(lxx)是视图中scope定义的,3/m:每分钟只能访问三次;4/h:每小时只能访问四次
            'lxx':'3/m'
        }
    }


    测试一分钟超过三次:

    image


    全局使用

    settings.py设置

    REST_FRAMEWORK = {
        'DEFAULT_THROTTLE_CLASSES':['自己定义的频率类'],
    }


    局部禁用

    在视图类中:

    class Books(APIView):
        throttle_classes = []  # 局部禁用
        def get(self, request):
            return Response('')


    3、内置频率限制类一览

    image

    BaseThrottle是所有类的基类:方法:def get_ident(self, request)获取标识,其实就是获取ip,自定义的需要继承它
    
    AnonRateThrottle:未登录用户ip限制,需要配合auth模块用
    
    SimpleRateThrottle:重写此方法,可以实现频率现在,不需要咱们手写上面自定义的逻辑
    
    UserRateThrottle:登录用户频率限制,这个得配合auth模块来用
    
    ScopedRateThrottle:应用在局部视图上的(忽略)






  • 相关阅读:
    js 检测浏览器
    js获取url参数
    js 使用Math函数取得数组最大最少值
    js 取一定范围内的整数
    遍历文件夹内所有文件
    'weinre' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案
    解决图片缓存导致页面刷新无效果问题
    JAVA中的几种基本数据类型是什么,各自占用多少字节
    Mac终端git,svn提交代码步骤
    小程序分享链接功能
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12521452.html
Copyright © 2011-2022 走看看