📂drf
2022-10-02 11:43阅读: 16评论: 0推荐: 0

drf 限流简单使用

重写SimpleRateThrottle的get_cache_key

from rest_framework.throttling import SimpleRateThrottle
from django.core.cache import cache as default_cache

class MyThrottle(SimpleRateThrottle):
    #存储的名字
    scope = 'login'
    THROTTLE_RATES = {'login': '5/m'}
    #取settings内的redis
    cache = default_cache

    def get_cache_key(self, request, view):
        if request.user:
            ident = request.user.pk
        else:
            # 父类获取ip地址
            ident = self.get_ident(request)

        return self.cache_format % {
            'scope': self.scope,
            'ident': ident
        }

image

视图

class LoginView(APIView):
    throttle_classes = [MyThrottle]

    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        user = models.UserInfo.objects.filter(username=username, password=password).first()
        if not user:
            return Response({'status': False, 'msg': '用户名密码错误', 'data': ''})
        token = user.token = uuid.uuid4()
        user.save()
        return Response({'status': True, 'msg': '登录成功', 'data': token})

settings内

# redis
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "xxxx"
        }
    }
}
REST_FRAMEWORK = {
    #限流频率控制
    "DEFAULT_THROTTLE_RATES": {
        'login': '5/m',
    },
}

效果

image

本文作者:Sherwin

本文链接:https://www.cnblogs.com/sherwin1995/p/16748501.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Sherwin_szw  阅读(16)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.