我想限制到服务器的IP连接(当前在本地实现)。
这是我的密码

  from flask import Flask, request
  from flask.ext.cors import CORS, cross_origin
  import time
  import redis
  from flask.ext.limiter.extension import  Limiter
  from flask.ext.limiter.util import get_ipaddr


  app = Flask(__name__)
  cors=CORS(app)


  limiter = Limiter(
  app,
  key_func=get_ipaddr,
  global_limits=[str(LIMITPERDAY) + " per day", str(LIMITPERMINUTE) + " per       minute"],
  storage_uri ="redis://127.0.0.1:6379",
  #strategy="moving-window",
  headers_enabled=True
 )


  @app.errorhandler(429)
  def ratelimit_handler(e):
       return "Ratelimit exceeded : " + e.description, 429

  if __name__ == '__main__':
     app.run(host="0.0.0.0",port=10005,threaded=True )

如果我注释掉策略部分,当我使用curl或纯html连接到服务器时,我会一直得到错误500:内部服务器错误。当我注释出策略时,代码可以工作。但是从我读到的
http://flask-limiter.readthedocs.org/en/latest/#flask_limiter.Limiter
我需要使用“移动窗口”连接到redis,否则默认为“固定窗口”。我真的不知道我的代码怎么了。
我在Windows10上运行Redis服务器。我在cygwin-64上放了瓶酒。
谢谢!

最佳答案

在激活调试之后,我发现错误是

      File "C:\Users\lita\Anaconda2\lib\site-packages\redis\connection.py",        line     582, in read_response
         raise response
      ResponseError: unknown command 'EVALSHA'

我选中https://github.com/nvie/rq/issues/398是因为redis>=2.6.0是必需的。我升级redis后,问题就解决了。

关于python - 无法为Flask-Limiter设置策略=“移动窗口”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36009115/

10-16 00:53