本文首发于:行者AI
速率限制通常作为服务的防御措施予以实施。服务需要保护自身以免过度使用(无论是有意还是无意),从而保持服务可用性。在Flask项目开发过程中,遇到了需要对接口进行限制的需求,又不想去造轮子,这时候就需要用到Flask-Limiter这个三方库。本文将对Flask-Limiter的使用进行详细说明。
1. 安装
安装依赖环境。
pip install Flask==1.1.1 Flask-Limiter==1.4
2. 快速开始
有两种方式表示速率限制:
- “100 per day”、“20 per hour”、“5 per minute”、“1 per second”
- “100/day”、“20/hour”、“5/minute”、“1/second”
速率限制可以设置全局配置,针对所有接口进行限制;也可以通过装饰器进行局部限制;对于不想限制的接口,可以通过装饰器@limiter.exempt
进行解除限制。示例代码如下所示:
app = Flask(__name__)
# 该配置为全局配置、适用于所有接口
limiter = Limiter(app, key_func=get_remote_address, default_limits=["100 per day", "10/hour"])
# @limiter.limit: 将覆盖全局limiter配置
@app.route("/slow")
@limiter.limit("1 per day")
def slow():
return ":("
# override_defaults: 表示该limiter是否覆盖全局limiter限制,默认为True
@app.route("/medium")
@limiter.limit("1/second", override_defaults=False)
def medium(