django利用django-ratelimit设置接口请求频率限制
一、概述
平台中需要编写接口供第三方调用,需要控制调用频率,需求为5s内调用一次后不得再次调用。
Django官方插件库中有个django-ratelimit插件可以满足要求, django-ratelimit文档地址,很灵活很强大。
官方文档:https://django-ratelimit.readthedocs.io/en/stable/
安装插件
pip3 install django-ratelimit
二、演示效果
要对某个url做限制,django-ratelimit有2种方法,一个是在路由里面配置,一个是在视图函数中添加装饰圈。
当然,还有其他方式,比如中间件,这里不做演示,具体请参考官方文档。
新建项目test1,app名为web
修改web/views.py,增加视图函数index
from django.shortcuts import render # Create your views here. def index(request): return render(request,"index.html")
在templates目录下,创建index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> Hello world </body> </html>
修改test1/urls.py,增加路由
from django.contrib import admin from django.urls import path from web import views urlpatterns = [ path('admin/', admin.site.urls), path('',views.index), ]
启动项目,访问默认页面
http://127.0.0.1:8000/
效果如下:
准备工作已经做好了,下面开始正式演示频率限制。
路由
修改test1/urls.py,增加限制
from django.contrib import admin from django.urls import path from ratelimit.decorators import ratelimit from web import views urlpatterns = [ path('admin/', admin.site.urls), path('', ratelimit(key='ip', method='GET', rate='1/5s',block=True)(views.index)), ]
参数说明:
ip 使用请求ip(获取request.META['REMOTE_ADDR']中的ip地址)
rate 频率参数,列表如下:
s - second m - minute h - hour d - day
上面写的1/5s,表示5秒内,只能调用一次。
block=True 注意:必须设置为true,才能生效。
重启项目,测试访问
视图函数
先注释掉路由,还原为之前的
修改test1/urls.py
from django.contrib import admin
from django.urls import path
from web import views
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.index),
]
修改web/views.py,在视图函数index前,增加装饰器
from django.shortcuts import render from ratelimit.decorators import ratelimit # Create your views here. @ratelimit(key='ip', rate='1/m',block=True) def index(request): return render(request,"index.html")
重启项目,测试访问。效果同上!
总结:还是用url里面定义是最方便的,不需要操作视图函数。
注意:针对uwsgi+nginx环境中,如果uwsgi运行了多个进程,这个限制效果会有影响。因为uwsgi多进程之间,内存是不共享的。
如果一个请求,刚好分配到一个新的uwsgi中,则是不受限制的。如果刚好分配到刚刚访问到的uswgi,才会有频率限制效果。
本文参考链接:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2019-12-04 python3使用smtplib发送邮件,带xlsx附件
2018-12-04 Kubernetes 部署kafka ACL(单机版)