中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django REST framework 如何實現內置訪問頻率控制

發布時間:2020-09-15 22:12:33 來源:腳本之家 閱讀:198 作者:little_pd 欄目:開發技術

對匿名用戶采用 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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南阳市| 南平市| 道孚县| 台前县| 民勤县| 同仁县| 垫江县| 辽源市| 陇川县| 舟山市| 华坪县| 通城县| 五家渠市| 信丰县| 阜新| 广宗县| 内黄县| 慈利县| 大英县| 赞皇县| 宜丰县| 繁昌县| 尉氏县| 光山县| 武冈市| 栾川县| 金华市| 嵊州市| 大化| 重庆市| 迭部县| 江华| 九龙城区| 衡东县| 故城县| 静宁县| 汤阴县| 阿拉善盟| 思南县| 新安县| 盐边县|