Django REST framework 如何实现内置访问频率控制

 更新时间:2019年07月23日 14:22:45   作者:little_pd  
这篇文章主要介绍了Django REST framework 内置访问频率控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

对匿名用户采用 IP 控制访问频率,对登录用户采用 用户名 控制访问频率。

from rest_framework.throttling import SimpleRateThrottle

class VisitThrottle(SimpleRateThrottle):
  """匿名用户访问频率限制"""
  scope = "AnonymousUser" # 随便写的,可以作为key保存在缓存中

  def get_cache_key(self, request, view):
    return self.get_ident(request)

class UserThrottle(SimpleRateThrottle):
  """登录用户访问频率限制"""
  scope = "LoginUser"

  def get_cache_key(self, request, view):return request.user

可以配置redis

CACHES = {
  "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379",
    "OPTIONS": {
      "CLIENT_CLASS": "django_redis.client.DefaultClient",
      "CONNECTION_POOL_KWARGS": {"max_connections": 100}
      # "PASSWORD": "密码",
    }
  }
}

匿名用户的访问频率限制,这里设置在全站下,如下:

REST_FRAMEWORK = {
  "DEFAULT_THROTTLE_CLASSES": ["appxx.utils.VisitThrottle"],
  "DEFAULT_THROTTLE_RATES":{
      "AnonymousUser": "3/m", # 匿名用户一分钟可以访问3次,秒(s)、分(m)、时(h)、天(d)
      "LoginUser": "10/m", # 登录用户一分钟可以访问10次
    }
}

登录用户的访问频率设置在单独的视图中,而视图依赖身份认证才能辨别用户是否登陆了,所以设置如下:

class BookViewSet(viewsets.ModelViewSet):
  authentication_classes = [TokenAuthentication]
  throttle_classes = [UserThrottle]
  queryset = models.Book.objects.all()
  serializer_class = serializers.BookSerializer

用户身份认证如下:

from rest_framework import authentication
from rest_framework import exceptionsfrom appxx import models

class TokenAuthentication(authentication.BaseAuthentication):
  """身份认证"""
  def authenticate(self, request):
    token = request.GET.get("token")
    obj = models.UserAuthToken.objects.filter(token=token).first()
    if not obj:
      raise exceptions.AuthenticationFailed("验证失败!")
    else:
      return (obj.user.username, obj.token)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python opencv将多个图放在一个窗口的实例详解

    python opencv将多个图放在一个窗口的实例详解

    这篇文章主要介绍了python opencv将多个图放在一个窗口,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Python实现灰色关联分析与结果可视化的详细代码

    Python实现灰色关联分析与结果可视化的详细代码

    今天小编通过代码以灰色色系为例给大家介绍Python灰色关联分析实现方法,灰色关联度分析对于一个系统发展变化态势提供了量化的度量,非常适合动态历程分析,感兴趣的朋友一起看看吧
    2022-03-03
  • 对python中xlsx,csv以及json文件的相互转化方法详解

    对python中xlsx,csv以及json文件的相互转化方法详解

    今天小编就为大家分享一篇对python中xlsx,csv以及json文件的相互转化方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python使用QQ邮箱实现自动发送邮件

    python使用QQ邮箱实现自动发送邮件

    这篇文章主要为大家详细介绍了python使用QQ邮箱实现自动发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Django中利用filter与simple_tag为前端自定义函数的实现方法

    Django中利用filter与simple_tag为前端自定义函数的实现方法

    这篇文章主要给大家介绍了Django中利用filter与simple_tag为前端自定义函数的实现方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • Django2.1.3 中间件使用详解

    Django2.1.3 中间件使用详解

    这篇文章主要介绍了Django2.1.3 中间件使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • python3 判断列表是一个空列表的方法

    python3 判断列表是一个空列表的方法

    今天小编就为大家分享一篇python3 判断列表是一个空列表的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python NumPy灰度图像的压缩原理讲解

    Python NumPy灰度图像的压缩原理讲解

    在本篇文章里小编给大家整理的是一篇关于Python NumPy灰度图像的压缩原理讲解内容,有兴趣的朋友们可以学习参考下。
    2021-08-08
  • Python嵌套函数与nonlocal使用详细介绍

    Python嵌套函数与nonlocal使用详细介绍

    这篇文章主要介绍了Python嵌套函数与nonlocal使用,nonlocal关键字与global关键字有点相似,可以对比着理解。nonlocal关键字只能作用域局部变量,且始终找离当前最近的上层局部作用域中的变量
    2022-09-09
  • 修复Python Pandas数据标记错误的几种方法总结

    修复Python Pandas数据标记错误的几种方法总结

    用于分析数据的 Python 库称为 Pandas,在 Pandas 中读取数据最常见的方式是通过 CSV 文件,但 CSV 文件的限制是它应该采用特定的格式,否则在标记数据时会抛出错误,在本文中,我们将讨论修复 Python Pandas 错误标记数据的各种方法
    2023-10-10

最新评论