ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

17 频率

2021-12-24 22:02:14  阅读:164  来源: 互联网

标签:THROTTLE 17 get DEFAULT rest framework classes 频率


频率的使用

# 限制访问次数(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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有