Python3 - Flask-RESTful 实现限制单个IP请求频率

当前,前后端分离已是大势所趋,那么写接口的时候,我们通常希望我们的接口不被恶意请求,这就需要限制单个IP的请求频率。这里我们用装饰器实现一下:

from flask import Flask, request
from flask_restful import Api, Resource
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
api = Api(app)

# 设置请求速率限制为每分钟最多十次
limiter = Limiter(
    app,
    key_func=get_remote_address,
    default_limits=["10 per minute"]
)

class ExampleResource(Resource):
    decorators = [limiter.limit("1 per minute")] # 单个IP每分钟只能请求一次

    def get(self):
        # 在这里实现具体的业务逻辑
        return {
    
    "message": "Hello, World!"}

api.add_resource(ExampleResource, "/example")

if __name__ == "__main__":
    app.run()

在上面的代码中,我们首先导入了需要的库,包括 Flask、Flask-RESTful、Flask-Limiter 等。然后创建了一个 Flask 应用对象和一个 Flask-RESTful API 对象。

接着,我们使用 Flask-Limiter 设置了默认的请求速率限制为每分钟最多十次,并使用 get_remote_address 函数作为请求者 IP 地址的键(这样可以确保不同的用户使用不同的速率限制)。然后,我们定义了一个继承自 flask_restful.Resource 的资源类 ExampleResource,并使用 decorators 属性添加了针对单个 IP 的请求速率限制为每分钟最多一次的装饰器。

最后,我们将 ExampleResource 类注册到 Flask-RESTful API 中,并启动 Flask 应用。当客户端向 /example 路径发起 GET 请求时,会触发 ExampleResource 类的 get 方法执行具体的业务逻辑,并在此之前根据请求者 IP 进行速率限制。

猜你喜欢

转载自blog.csdn.net/qq_31810357/article/details/129738554