Skip to main content

docs ci codecov pypi license

Flask-Limiter provides rate limiting features to flask applications.

It allows configuring various backends to persist the rate limits, which is provided by the limits library.

Quickstart

Add the rate limiter to your flask app.

from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(
    app,
    key_func=get_remote_address,
    default_limits=["2 per minute", "1 per second"],
    storage_uri="memory://",
    # Redis
    # storage_uri="redis://localhost:6379",
    # Redis cluster
    # storage_uri="redis+cluster://localhost:7000,localhost:7001,localhost:70002",
    # Memcached
    # storage_uri="memcached://localhost:11211",
    # Memcached Cluster
    # storage_uri="memcached://localhost:11211,localhost:11212,localhost:11213",
    # MongoDB
    # storage_uri="mongodb://localhost:27017",
    strategy="fixed-window", # or "moving-window"
)

@app.route("/slow")
@limiter.limit("1 per day")
def slow():
    return "24"

@app.route("/fast")
def fast():
    return "42"

@app.route("/ping")
@limiter.exempt
def ping():
    return 'PONG'

app.run()

Test it out. The fast endpoint respects the default rate limit while the slow endpoint uses the decorated one. ping has no rate limit associated with it.

$ curl localhost:5000/fast
42
$ curl localhost:5000/fast
42
$ curl localhost:5000/fast
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>429 Too Many Requests</title>
<h1>Too Many Requests</h1>
<p>2 per 1 minute</p>
$ curl localhost:5000/slow
24
$ curl localhost:5000/slow
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>429 Too Many Requests</title>
<h1>Too Many Requests</h1>
<p>1 per 1 day</p>
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG

For more details read the docs

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Flask-Limiter-2.6.2.tar.gz (283.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

Flask_Limiter-2.6.2-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file Flask-Limiter-2.6.2.tar.gz.

File metadata

  • Download URL: Flask-Limiter-2.6.2.tar.gz
  • Upload date:
  • Size: 283.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for Flask-Limiter-2.6.2.tar.gz
Algorithm Hash digest
SHA256 58b361347f68942ea2d0a9004427098b41da705081494fe3b9be7b67c4ae32c4
MD5 3d9a1f4af02dd7daa791027c5c83db77
BLAKE2b-256 a81617de7bc1cd6ddf6a478b8eac7834030cd928e422d3365d6a79fbd7b1e6f8

See more details on using hashes here.

File details

Details for the file Flask_Limiter-2.6.2-py3-none-any.whl.

File metadata

  • Download URL: Flask_Limiter-2.6.2-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for Flask_Limiter-2.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c8451532f88818e839bbdd650cfd424ec11e89fa87e0034f525401399a160e1e
MD5 1cac95c88167fcb4082e181999e368f9
BLAKE2b-256 e3a806bac2c8199c4bc4d5bc5922cbabf1b3f4590049c2377ca924477842f2ec

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page