其他分享
首页 > 其他分享> > 17 频率

17 频率

作者:互联网

频率的使用

# 限制访问次数(IP,用户id)

# 限制同一个IP一分钟只能访问3次

# 使用步骤
    -第一步:写一个类,继承SimpleRateThrottle,重写get_cache_key
    -第二步:get_cache_key返回什么就以什么做限制,必须写类属性 scope='字符串'
    -第三步:配置文件中配置
      'DEFAULT_THROTTLE_RATES': {
        '字符串': '3/m',  # key:ip_1m_3 对应频率类的scope属性, value: 3/m 一分钟访问3次
          # m:分钟
          # s:秒
          # h:小时
          # d:天
        },
            
     -第四步:局部使用和全局使用

auth.py   可以是任意的单独文件

from rest_framework.throttling import BaseThrottle,SimpleRateThrottle
class MyThrottling(SimpleRateThrottle):
    scope = 'ip_1m_3'  # 必须写scope是一个字符串

    def get_cache_key(self, request, view):
        # 返回什么,就以什么做限制(ip地址)
        # 客户端ip地址
        return request.META.get('REMOTE_ADDR')

        # 以用户id限制
        # return request.user.id

settings.py  #配置文件 +全局使用


REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ['app01.auth.AuthLogin' ], 'DEFAULT_THROTTLE_RATES': { "ip_1m_3":"3/m" }, #配置文件,限制用户一分钟访问3次 'DEFAULT_THROTTLE_CLASSES': ['app01.auth.MyThrottling'], #全局使用 }

views.py   #局部使用

class BookView(ModelViewSet):

    throttle_classes = [MyThrottling]    #局部使用
    authentication_classes = []           
    queryset = models.Book.objects.all()
    serializer_class = BookSerializer

1 频率

1.1 内置的频率限制(限制未登录用户)

# 全局使用  限制未登录用户1分钟访问3次
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '3/m',
    }
}
##############views.py
from rest_framework.permissions import IsAdminUser
from rest_framework.authentication import SessionAuthentication,BasicAuthentication
class TestView4(APIView):
    authentication_classes=[]
    permission_classes = []
    def get(self,request,*args,**kwargs):
        return Response('我是未登录用户')

# 局部使用
from rest_framework.permissions import IsAdminUser
from rest_framework.authentication import SessionAuthentication,BasicAuthentication
from rest_framework.throttling import AnonRateThrottle
class TestView5(APIView):
    authentication_classes=[]
    permission_classes = []
    throttle_classes = [AnonRateThrottle]
    def get(self,request,*args,**kwargs):
        return Response('我是未登录用户,TestView5')

 

 

 

 

 

 

 

 

 

 

1.2 内置频率限制之,限制登录用户的访问频次

# 需求:未登录用户1分钟访问3次,登录用户一分钟访问5次
全局:在setting中
  'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ),
    'DEFAULT_THROTTLE_RATES': {
        'user': '5/m',
        'anon': '3/m',
    }

 局部配置:
    在视图类中配一个就行

 

 

 

 

补充:

 

 

 

 

 

 

 

标签:THROTTLE,17,get,DEFAULT,rest,framework,classes,频率
来源: https://www.cnblogs.com/Haier123/p/15729414.html