我想限制到服务器的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/