Flask-Limiter 接口访问频次限制

flask-limiter - 第三方控频插件

官方文档:FlaskLIMITER

flask-limiter 是一个对客户端的访问速率进行限制的flask扩展.可以自定义一些访问的(速度)限制条件来把那些触发限制的请求拒之门外.一般常用来进行对爬虫的限制.
下面就常见的用法,举了一些例子.更多的例子,请自己查看原始文档.

FBV实现方式

# -*- coding: utf-8 -*-
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(
    app,
    key_func=get_remote_address,
    # 每天限制多少次,每小时限制多少次,没分钟限制多少次
    default_limits=["20 per day", "2 per hour", "1 per minute"],
    # 存储位置可以选择 redis 来存储
    storage_uri="redis://:123456@127.0.0.1:6379/0"
)


# 地址 slow 每分钟只能访问一次
@app.route("/slow")
@limiter.limit("1 per minute")
def slow():
    return "24"


# 地址 fast 走全局的配置 default_limits
@app.route("/fast")
def fast():
    return "42"


# 地址 ping 通过
@app.route("/ping")
@limiter.exempt
def ping():
    return "PONG"


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

注:在使用 redis 作为存储位置的时候,我们需要值得注意的是,要想让limiter缓存在redis中必须安装相应的支持库,Flask-Limiter并不会自动安装,所以需要我们手动 pip install flask-redis 。

原文地址:https://www.cnblogs.com/shangwei/p/14339511.html