在 Flask-Restful API 的 method_decorators 上不调用 Flask-Limiter

Flask-Limiter is not called on Flask-Restful API's method_decorators

我试过一些问题但没有成功:

由于 outside of context 问题,我在 util.py 文件中创建了一个 limiter 函数,如下所示:

def limiter():
    _limiter = Limiter(
        app,
        key_func=get_remote_address
    )
    return _limiter

在我的 Flask-Restful API 资源中,我在 method-decorators:

中调用了这个限制器
from ..utils import limiter

class UsersView(Resource, CustomAPIMixin):
     method_decorators = [limiter().limit("1/minute", methods=["GET"])]

     @jwt_authenticate()
     def get(self):
         user_id = get_jwt_identity()
         return self.api_response(content={"user_id": user_id})

注意: 我正在使用 Flask version 2Flask-Limiter 1.4


EDIT-1:

my_api
    models
    scripts
    views
         users.py
    __init__.py  # contains create_app() to return Flask app
    utils.py. # contains custom rate_limit() function

编辑-2: 以下是 Flask-Limiter 无法运行的完整工作代码:

Flask-Limiter 文档给出了一个适合这种情况的示例:https://flask-limiter.readthedocs.io/en/stable/#using-flask-pluggable-views

如果您设置 decorators 而不是 method_decorators,它应该可以解决您的问题。

这是一个完整的示例,演示了所提供代码的速率限制。

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


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


def limiter():
    _limiter = Limiter(
        app,
        key_func=get_remote_address
    )
    return _limiter


class CustomAPIMixin:
    def api_response(self, content):
        return content


def get_jwt_identity():
    return 0


class UsersView(Resource, CustomAPIMixin):
    decorators = [limiter().limit("1/minute", methods=["GET"])]

    # @jwt_authenticate()
    def get(self):
        user_id = get_jwt_identity()
        return self.api_response(content={"user_id": user_id})


api.add_resource(UsersView, '/')

if __name__ == '__main__':
    app.run(debug=True)