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
}
视图
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',
},
}
效果
本文作者:Sherwin
本文链接:https://www.cnblogs.com/sherwin1995/p/16748501.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步