DRF限流

59 阅读1分钟

限流

匿名用户全局限流

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

可以在配置文件中,使用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'
      }
  }