烧瓶限制器错误:类型错误:Limiter.__init__() 为参数'key_func'获取多个值



我正在尝试使用Flask的速率限制库来基于秒限制API的速率。

因此,我使用了完全相同的格式来限制对Apache服务器上API的请求。然而,我现在使用的是NGINX。我不认为这有什么不同,但是当我运行这段代码:

import api
app = Flask(__name__, instance_relative_config=True)
limiter = Limiter(app, default_limits=["5/second"], key_func=lambda: get_remote_address)
limiter.limit("5/second", key_func=lambda: request.args.get('token') if 'token' in request.args else get_remote_address)(api.bp)
app.register_blueprint(api.bp)

再次,我在另一个服务器上运行了完全相同的代码,但现在它给出了这个错误:

limitter = limitter (app, "5/seconds ", key_func=lambda:
request.args.get('token')如果'token'在请求中。get_remote_address)

TypeError: limitter .__init__()参数'key_func'有多个值

任何帮助都太好了。我在python中使用Flask-Limiter,并在NGINX的gunicorn服务器上运行gevent。

您的Limiter类实例化不正确。下面是正确的

limiter = Limiter(get_remote_address, app=app, default_limits=["200 per day", "50 per hour"])

在你的原始代码中,由于app也是init的一个参数()函数,app将被解释为key_func的值,然后通过key_func=get_remote_address传递第二个key_func参数的值,从而得到init()函数接收到多个key_func参数值,因此抛出错误。

以下是限制器的定义:

def __init__(
self,
key_func: Callable[[], str],
*,
app: Optional[flask.Flask] = None,
default_limits: Optional[List[Union[str, Callable[[], str]]]] = None,
default_limits_per_method: Optional[bool] = None,
default_limits_exempt_when: Optional[Callable[[], bool]] = None,
default_limits_deduct_when: Optional[...

相关内容

最新更新