17 频率

2021/12/24 23:11:51

本文主要是介绍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',
    }

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

 

 

 

 

补充:

 

 

 

 

 

 

 


这篇关于17 频率的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程