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






原文地址:https://www.cnblogs.com/weiyiming007/p/12521452.html