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:应用在局部视图上的(忽略)






  • 相关阅读:
    VS2013 连接 MySQL
    2014年下半年的目标
    BI开发之——Mdx基础语法(2)(转至指尖流淌)
    BI开发之——Mdx基础语法(转至指尖流淌)
    数据仓库构建
    数据仓库的定义
    2014年计划:
    [转载]商业智能的三个层次
    BI入门基础知识-1
    ASP.NET MVC4 异常拦截
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12521452.html
Copyright © 2011-2022 走看看