基于签名cookie的django限制rps模块
django_limiter的Python项目详细描述
django限制器是一个基于签名cookie的rps(每秒请求数)限制器。
它是怎么工作的?
如果用户(或解析器)第一次访问您的站点,他将重定向到特殊页面并 接收具有当前时间戳的签名cookie。在这个页面上,他将被JavaScript重定向到URL 他以前要求过。
如果用户使用限制器的cookie访问您的站点,限制器会检查cookie,如果最后一个请求没有多少时间, 限制器抛出带有429状态代码的http响应(请求太多)
否则什么都不会发生
客户端无法正确更改限制器的cookie和滥用(请在此处阅读有关签名的详细信息:https://docs.djangoproject.com/en/dev/topics/signing/)
安装
从pypi安装:
$ pip install django_limiter
将'django_limiter'附加到INSTALLED_APPS中:
INSTALLED_APPS=[# your apps'django_limiter',]
在'django_limiter.middleware.RateLimiter'之前将'django_limiter.middleware.RateLimiter'插入MIDDLEWARE设置(或MIDDLEWARE_CLASSES):
MIDDLEWARE=['django_limiter.middleware.RateLimiter',# Another middlewares]
将url(r'^limiter/', include(django_limiter.urls))添加到URL配置:
importdjango_limiterurlpatterns=[url(r'^admin/',admin.site.urls),# Another url patternsurl(r'^limiter/',include(django_limiter.urls)),]
配置
以下是您可以设置的几个设置:
LIMITER_COOKIE_NAME-cookie的名称默认值:'限制器'
LIMITER_INTERVAL-客户端必须等待时间(以秒为单位,可以是浮动的),然后才能发送下一个请求。默认值:0.333
LIMITER_TEMPLATE_NAME-客户端临时获取的页模板的名称。此页应在经过LIMITER_INTERVAL秒后将客户端重定向到请求的页。模板接收'timeout'、'path'和'request'上下文
LIMITER_EXCEPT-URL限制列表必须除外。不应将根('/')添加到此列表中。默认值:[]
LIMITER_EXCEPT=['/my/custom/path',reverse_lazy('or-lazy-reverse')]