赞
踩
当前,前后端分离已是大势所趋,那么写接口的时候,我们通常希望我们的接口不被恶意请求,这就需要限制单个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 进行速率限制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。