flask限流插件flask_limiter使用介绍
- 2025-03-31 13:37:02
- 开发
- 37
- shevechco
Flask-Limiter是一个专为 Flask 应用设计的速率限制扩展程序,你可以根据提供的限流策略对自己web业务实施访问限制,实现整个web业务的流量管理功能。
接下来我们看看Flask-Limiter如何使用,首先我们先进行安装
pip install Flask-Limiter
在flask应用中使用flask_limiter有好几种方式,可以在蓝本中进行限流,在具体的视图函数中使用限流
限流频率的几种表现形式,可以多个策略叠加或者混用
10 per hour #都是代表每小时10次
10/hour #都是代表每小时10次
10/hour;100/day;2000 per year #每小时10次,每天100次,每年2000次
100/day, 500/7days #每天100次,妹7天500次,注意days复数
上面per和/都是作为分隔符作用,接下来我们来看看具体使用,我们还是在正式的项目中使用,有应用工厂,还是在应用工厂中进行延迟初始化
我的扩展实例化都是在应用工厂的统计目录的__init__.py文件中
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
limiter = Limiter(key_func=get_remote_address, storage_uri="memory://", default_limits=["200 per day", "50 per hour"])
我们限制策略是根据访问的IP地址,设置了一条全局的限制策略,是200次每天和50次每小时,然后存储方式是使用的内存方式,也可以使用redis,根据自己的需要进行选择,如果是redis的话storage_uri按照以下配置修改
storage_uri="redis://localhost:6379/0"
然后在应用工厂(application.py)中进行延迟初始化并挂载到app实例中
from apps import limiter
#工厂函数
def create_app():
app = Flask(__name__)
app.secret_key = 'yang.su'
app.config.from_pyfile("../settings.py")
limiter.init_app(app)
return app
然后使用可以在直接视图函数中添加限制即可,error_message是自定策略消息
@action.route('/login', methods=['GET', 'POST'])
@limiter.limit("2/second", error_message="Too many requests!")
def login():
pass
也可以装饰请求钩子上,这样整个请求的蓝本都会集成这个策略
@article.before_request
@limiter.limit("3/second", error_message="Too many requests!")
def post_cache():
pass
当钩子或者具体的视图函数都设置了策略,两个策略是叠加的,也可以选择覆盖的全局的策略,使用override_defaults
@action.route('/login', methods=['GET', 'POST'])
@limiter.limit("2/second", override_defaults=True, error_message="Too many requests!")
def login():
pass
还可以对指定的method方法进行限流,例如限流应用于POST方法,忽略其他方法
@action.route('/login', methods=['GET', 'POST'])
@limiter.limit("2/second", methods=["POST"], error_message="Too many requests!")
def login():
pass
也可以对某些条件进行限流的豁免
@action.route('/login', methods=['GET', 'POST'])
@limiter.limit("2/second", exempt_when=lambda: current_user.level == 1, error_message="Too many requests!")
def login():
pass
以上就是Flask-Limiter的使用介绍,可以根据需求动态调整限流规则、豁免特定条件下的限流、并且为不同的 HTTP 方法设定独立的限流规则。
内容版权声明:除非注明,否则皆为本站原创文章。