当前位置: 首页 > 编程笔记 >

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

慕佑运
2023-03-14
本文向大家介绍Django REST framework 如何实现内置访问频率控制,包括了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)

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

 类似资料:
  • 问题内容: java中如何实现访问控制,public, protected, default和private关键字有何区别? 问题答案:

  • 本文向大家介绍如何实现广告弹窗触达频率的控制?,包括了如何实现广告弹窗触达频率的控制?的使用技巧和注意事项,需要的朋友参考一下 如何实现广告弹窗触达频率的控制? 今天我们聊聊实际工作中遇到的一个问题: 产品提出想在我们的产品的首页做个弹窗广告,但是又不希望用户每次进来都给用户弹窗,每个用户每天进来只弹一次就好了。 这个如何实现? 方法一(暴力破解) 或许有些人会觉得这个挺简单的,这个问题抽象出来不

  • 本文向大家介绍Django 限制用户访问频率的中间件的实现,包括了Django 限制用户访问频率的中间件的实现的使用技巧和注意事项,需要的朋友参考一下 一、定义限制访问频率的中间件 common/middleware.py 二、将中间件加入配置文件 setting.py 对使用 rest_framework 框架的项目来说,可以使用框架的设置来对api的访问频率进行限制 以上就是本文的全部内容,希

  • 我们将用户权限存储在声明中。 下面是企业客户索赔的样子: 然后,当用户试图使用从web检索文件的下载URL时,Firebase抛出一个权限错误。 你能提供一个解决方案吗?

  • 本文向大家介绍如何实现跨域访问?相关面试题,主要包含被问及如何实现跨域访问?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: JSONP:通过动态创建script,再请求一个带参网址实现跨域通信。document.domain + iframe跨域:两个页面都通过js强制设置document.domain为基础主域,就实现了同域。 JSONP:ajax请求受同源策略影响,不允许进行跨域请求,

  • 本文向大家介绍C# 站点IP访问频率限制 针对单个站点的实现方法,包括了C# 站点IP访问频率限制 针对单个站点的实现方法的使用技巧和注意事项,需要的朋友参考一下  站点IP访问频率限制 针对单个站点 以上这篇C# 站点IP访问频率限制 针对单个站点的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。