django restframework 访问频率控制

前两天写了用户认证与权限控制,今天写一个如何控制访问频率。
有时候我们会限制用户在一定时间对某个网页的访问,以前在写爬虫的时候也遇见过这个问题,只是,这次我们反过来,我们成了坚守的一方。
限制基本的思路限制IP 的访问次数,即我们设定一个值,让某个IP 在某个时间间隔内,它只能访问一定的次数。假如某个用户更换IP,这个目前是解决不了的,所以做爬虫时,构建IP 代理池是一个很好的办法。
开始今天的代码。
首先和前两天一样,建表,编写视图函数,设置路由,因为以前都介绍过,这里还是写今天的主要内容。
django restframework 访问频率控制_第1张图片
我们整体思路是设置一个字典,字典的键设置为IP,字典的值为该IP 的访问时间,为一个列表。假如用户访问这个网页,首先判断该IP 是否访问过,没有就加入字典,有的话,判断列表里面的数据,假如我们设置的是60秒只能访问3次,那么用当前的时间跟列表里面的数据进行比较,把时间间隔大于60秒的都pop掉,小于60的继续放在里面,最后对列表的长度进行整体判断,假如列表的长度大于3,说明60秒内访问的次数大于3次,我们就限制它的访问,如何限制呢?跟以前一样,还是通过引入类的方式进行限制,下面是代码
django restframework 访问频率控制_第2张图片
下来,在OrderView 里面引入这个验证机制。
django restframework 访问频率控制_第3张图片
通过PostMan 进行测试,如果你设置的时间参数跟我一样,会发现连续点击三次之后,会出现这个界面,表示拒绝访问。
django restframework 访问频率控制_第4张图片
我们也可以传递给前端还有多久可以访问
django restframework 访问频率控制_第5张图片
再次点击PostMan ,禁止访问之后,发现返回的数据已经发生变换
django restframework 访问频率控制_第6张图片
写到这里的话,就表示我们自定义的控制访问频率已经完成,但是,假如有多个不同的用户该如何处理,我们写的VISITE_RECODE 记录访问的用户,每次一重启就会消失,现在我们继承restframework 的频率控制类,它帮我们写好了相应的程序。
我们新写一个频率控制类,继承restframework 的模板
django restframework 访问频率控制_第7张图片
我们可以查看继承的这个类的源码,我们上面自定义的方法就是基于这个基础类写的。
最后我们在settins里面进行设置,10/m, 4/h 可以在源码里面看到原因。
django restframework 访问频率控制_第8张图片
最后我们将新写的类加入验证
django restframework 访问频率控制_第9张图片
刚才我们自定义的是一分钟内最多访问3次,现在是在settings 里面设置了一分钟访问10次,通过PostMan 测试过后,大概点击十几次之后,会发现拒绝访问。
至此,自定义或者继承类都讲完了,但是都是特别基础的东西,想要深入了解的话,还得自己定义更多的内容,或者多读读源码。

你可能感兴趣的:(Django)