45.限流Throttling及源码解析( 四 )

  1. 继承BaseThrottle类或者根据场景继承其他限流类
  2. 实现allow_request方法 , 如果请求被允许 , 那么返回True , 否则返回False
  3. wait方法 , 是否实现根据自己场景
  4. 获取唯一标识的方法可以使用源码自由的 , 也可以自定义
  场景案例1假设我们的请求需要同时进行多个认证用户的限流措施 , 比如每小时限制100次 , 同时每天限制1000次# 每小时的限流类class UserHourRateThrottle(UserRateThrottle):scope = 'userHour'# 每天的限流类class UserDayRateThrottle(UserRateThrottle):scope = 'userDay' # settings中进行配置REST_FRAMEWORK = {'DEFAULT_THROTTLE_CLASSES': (# 配置我们自定义的限流类或者再view中进行局部的配置'testApi.throttles.UserHourRateThrottle','testApi.throttles.UserDayRateThrottle'),'DEFAULT_THROTTLE_RATES': {'userHour': '100/hour', # 每小时最多100次'userDay': '1000/day' # 每天最多100次}}场景案例2随机限制import randomclass RandomRateThrottle(throttling.BaseThrottle):def allow_request(self, request, view):# 如果随机的数字 不等于1 , 返回True , 否则返回Falsereturn random.randint(1, 10) != 1# 之后在settings进行配置或者局部配置
45.限流Throttling及源码解析

文章插图
【45.限流Throttling及源码解析】

经验总结扩展阅读