drf--------频率组件

Django-drf-内置频率类的使用

        限制未登录用户的频率 -- AnonRateThrottle根据ip限制

        局部使用

from rest_framework.throttling import AnonRateThrottle  # 在视图类中导入
from rest_framework.generics import ListAPIView
class listbook(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

    throttle_classes = [AnonRateThrottle]   # 在视图类中配置

settings.py配置文件配置

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
        'anon': '1/m',  # 表示每分钟访问一次
        # duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[0]]
    }}

限制登录用户访问次数UserRateThrottle -- 根据用户id限制

 

局部使用

from rest_framework.throttling import UserRateThrottle  # 在视图类中导入
from rest_framework.generics import ListAPIView
class listbook(ListAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

    throttle_classes = [UserRateThrottle]   # 在视图类中配置

settings.py配置文件配置

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
        'user': '1/m',  # 表示每分钟访问一次
        # duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[0]]
    }}

# 限制访问频次
    -比如某个接口,一分钟只能访问5次,超过了就得等
    -按IP地址  限制
    -按用户id  限制
    
# 频率类的使用步骤
    1 写个类,继承:SimpleRateThrottle
    2 重写某个方法:get_cache_key
        -可以返回ip或用户id
        -返回什么,就以什么做频率限制
        
    3 写一个类属性,随意命名一个名
        scope = 'lqz'
    4 在配置文件中配置:
     'DEFAULT_THROTTLE_RATES': {
        'lqz': '3/m' # 一分钟访问3次
    },
        
        
   5 全局用
    'DEFAULT_THROTTLE_CLASSES': [

        ],
   6 局部用
    class BookView(APIView):
        throttle_classes = [MyThrottle]

 频率类

from rest_framework.throttling import SimpleRateThrottle


class MyThrottle(SimpleRateThrottle):
    scope = 'lqz'
    def get_cache_key(self, request, view):
        # 返回客户端ip地址:
        ip=request.META.get('REMOTE_ADDR')
        print('客户端的ip是:',ip)
        return ip

配置文件

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [      #认证类
        'app01.auth.LoginAuth'
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'app01.permission.AdminPermission'     #权限类
    ],
    'DEFAULT_THROTTLE_RATES': {
        'lqz': '3/m'                 #lqz   要和上面的scope 参数的对应。
                                                一分钟访问三次
    },
'DEFAULT_THROTTLE_CLASSES': [          #频率类

],

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值