大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程的进阶版。
在之前《用Django全栈开发》系列专辑里面,皮爷详细的阐述了如何编写一个完整的网站,具体效果可以在代码里面获取。
从进阶篇开始,每一篇文章都是干货满满,干的不行。这一节,我们来说:如果网页被大量快速访问,该如何限制。
获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』
皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码对应的Tag是“Advanced_07”。
场景分析
每一次用户的访问,对服务器来说,都是一个request。对每一个request,服务器都会耗费CPU来处理请求。如果同一个IP,访问速度过快,比如一秒钟发来十几个请求甚至百个,那么你的服务器即使再有缓存,对待每一个请求,多多少少你也得走几行代码。如果访问的主机短时间之内暴增,而且每台机器都短时间内大量发送请求,那么你的服务器短时间之内就会崩掉。
所以,针对上面的场景,我们需要对我们的网站添加一个限制刷新评率的功能。就像某知名论坛一样,刷新频率不得超过2秒:
Django-ratelimit
如何实现请求次数的限制?
我们这里准备使用Django-ratelimit
来实现。当然,首先还是来安装:
$ pip install django-ratelimit==3.0.0
安装好之后,我们接下来看如何使用。
在Django-ratelimit库中,你可以使用注解的方式来实现刷新限制,或者直接调用方法:
- 直接方法有:
@ratelimit()
; - 直接调用方法有:
get_usage()
以及is_ratelimited()
; - 最后抛出一个:
ratelimit.exceptions.Ratelimited
如何实现控制
注解视图函数
通过注解实现,这个使用起来很简单,只需要直接在你需要限制的视图函数里面添加注解就可以了,比如,我们这里将首页添加限制:
@ratelimit(key='ip', rate='2/10s', block=True