欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django-drf框架之限流

程序员文章站 2022-07-12 10:34:04
...

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

限流

匿名用户全局限流

可以对接口访问的频次进行限制,以减轻服务器压力。特别是限制爬虫的抓取。

可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES进行全局配置

REST_FRAMEWORK = {
      'DEFAULT_THROTTLE_CLASSES': (
          # 限制所有匿名未认证用户,使用IP区分用户
          'rest_framework.throttling.AnonRateThrottle'
      ),
      'DEFAULT_THROTTLE_RATES': {
          # 可以使用 second, minute, hour 或day来指明周期
          'anon': '3/minute',
          'user': '5/minute'
      }
  }

匿名用户局部限流

视图中使用throttle_classes属性设置限流用户类型

from rest_framework.generics import ListAPIView
  from rest_framework.throttling import AnonRateThrottle

  from .serializer import UserSerializer, User

  class UserView(ListAPIView):
      queryset = User.objects.all()
      serializer_class = UserSerializer
      throttle_classes = [AnonRateThrottle]  # 指明针对匿名用户进行限流,限流频率全局配置

在项目配置文件中针对用户类型设置具体频率

REST_FRAMEWORK = {
      'DEFAULT_THROTTLE_RATES': {
          # 可以使用 second, minute, hour 或day来指明周期
          'anon': '3/minute',
          'user': '5/minute'
      }
  }