1

将用户可以执行的操作数限制为每分钟一次的最佳方法是什么?

@route('/do_something/<cmd>',method=['GET','POST'])
def my_command(cmd):
    # Only allow this to be executed once every 60s per user/ip.

我正在寻找服务器端解决方案,因为我想根据用户 IP 地址强制执行此操作。

4

1 回答 1

1

python 中可能已经存在throttling解决方案,更具体地说是瓶子框架。您可以使用存储和一些小脚本来推出自己的。由于您的节流时间非常短,即 1 分钟,因此 memcache 将是存储值的好选择。

  1. 根据节流所需的条件生成哈希。例如哈希(用户+ ip)等。
  2. 当您收到新请求时,请检查 memcache 是否存在以散列作为键的值。

3(一)。值不存在: - 将当前时间戳整数存储在内存缓存中,将此哈希作为键,TTL 1 分钟。

(b) 值存在: - 放弃请求。

这是为 redis 编写的一个非常好的装饰器(用于烧瓶框架,但也可以在其他任何地方工作):

http://flask.pocoo.org/snippets/70/

于 2013-06-24T11:09:07.870 回答