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' } }
测试一分钟超过三次:
全局使用
settings.py设置
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES':['自己定义的频率类'], }
局部禁用
在视图类中:
class Books(APIView): throttle_classes = [] # 局部禁用 def get(self, request): return Response('')
3、内置频率限制类一览
BaseThrottle是所有类的基类:方法:def get_ident(self, request)获取标识,其实就是获取ip,自定义的需要继承它 AnonRateThrottle:未登录用户ip限制,需要配合auth模块用 SimpleRateThrottle:重写此方法,可以实现频率现在,不需要咱们手写上面自定义的逻辑 UserRateThrottle:登录用户频率限制,这个得配合auth模块来用 ScopedRateThrottle:应用在局部视图上的(忽略)