throttling功能为DRF内置功能我们无需安装第三方包可以直接使用。
查看官方文档:http://www.django-rest-framework.org/#api-guide
配置
按照文档 我们需要在settings.py文件进行如下配置:
1 | REST_FRAMEWORK = { |
DEFAULT_THROTTLE_CLASSES
是配置限速类,AnonRateThrottle
是指匿名用户(未登录用户),UserRateThrottle
是指登录用户。
查看源码得知,匿名用户的判断依据可知是通过IP地址,登录用户的判断依据是Token。两者的判断依据是不一致的。
DEFAULT_THROTTLE_RATES
是配置限速规则,具体可以是时分秒等。
我们看下官方文档的描述:
The rate descriptions used in
DEFAULT_THROTTLE_RATES
may includesecond
,minute
,hour
orday
as the throttle period.
使用
1 | from rest_framework.response import Response |
除了APIView外,我们当然可以配置到ViewSet中,同样只需要配置throttle_classes
在类中即可。
原理
我们查看下AnonRateThrottle
的源码
1 | class AnonRateThrottle(SimpleRateThrottle): |
接着看继承的SimpleRateThrottle
部分源码
1 | class SimpleRateThrottle(BaseThrottle): |
具体如何获得请求IP呢?我们看下BaseThrottle
的源码:
1 | class BaseThrottle(object): |