Skip to main content

docs ci codecov pypi license

Flask-Limiter adds rate limiting to Flask applications.


Sponsored by Zuplo a fully-managed API Gateway for developers. Add dynamic rate-limiting authentication and more to any API in minutes. Learn more at zuplo.com


You can configure rate limits at different levels such as:

Flask-Limiter can be configured to fit your application in many ways, including:

  • Persistance to various commonly used storage backends (such as Redis, Memcached & MongoDB) via limits

  • Any rate limiting strategy supported by limits

Follow the quickstart below to get started or read the documentation for more details.

Quickstart

Install

pip install Flask-Limiter

Add the rate limiter to your flask app

# app.py

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

app = Flask(__name__)
limiter = Limiter(
    get_remote_address,
    app=app,
    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'

Inspect the limits using the command line interface

$ FLASK_APP=app:app flask limiter limits

app
├── fast: /fast
   ├── 2 per 1 minute
   └── 1 per 1 second
├── ping: /ping
   └── Exempt
└── slow: /slow
    └── 1 per 1 day

Run the app

$ FLASK_APP=app:app flask 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

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-3.3.0.tar.gz (299.8 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-3.3.0-py3-none-any.whl (27.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: Flask-Limiter-3.3.0.tar.gz
  • Upload date:
  • Size: 299.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for Flask-Limiter-3.3.0.tar.gz
Algorithm Hash digest
SHA256 8a03a3c173e770f4fc3e8e5998b84931e48c4b50375096aef2afcdeadc64086d
MD5 f9ed0e550353ca14430cafb789b9c02b
BLAKE2b-256 765b1a40b17c2cdc6420cabae3f3f75c6b194903210f71586e718f26b0e2ae7a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: Flask_Limiter-3.3.0-py3-none-any.whl
  • Upload date:
  • Size: 27.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for Flask_Limiter-3.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 afa9555ed3d0a727c6d3d9890c2b495b9d7845b3a43f641a4e7b274556a41988
MD5 a493cc73ab9dc5658ab4d1fcdeb672f7
BLAKE2b-256 18d7fcfac75b5fb81e9a32e23ebf36ac7f464b0060f5ce668a0232a6154067ef

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