Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alisaifee/flask-limiter
Rate Limiting extension for Flask
https://github.com/alisaifee/flask-limiter
flask memcached python rate-limiting redis
Last synced: 6 days ago
JSON representation
Rate Limiting extension for Flask
- Host: GitHub
- URL: https://github.com/alisaifee/flask-limiter
- Owner: alisaifee
- License: mit
- Created: 2014-02-12T03:37:41.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2024-05-19T15:54:21.000Z (6 months ago)
- Last Synced: 2024-05-30T00:04:05.804Z (5 months ago)
- Topics: flask, memcached, python, rate-limiting, redis
- Language: Python
- Homepage: https://flask-limiter.readthedocs.org
- Size: 1.5 MB
- Stars: 1,078
- Watchers: 12
- Forks: 122
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Funding: .github/FUNDING.yml
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-flask - Flask-Limiter - Flask-Limiter provides rate limiting features to flask routes (Rate Limiting)
- awesome-flask - Flask-Limiter - Flask-Limiter provides rate limiting features to flask routes (Rate Limiting)
- awesome-flask - Flask-Limiter - Flask-Limiter provides rate limiting features to flask routes (Rate Limiting)
- awesome-hacking-lists - alisaifee/flask-limiter - Rate Limiting extension for Flask (Python)
- jimsghstars - alisaifee/flask-limiter - Rate Limiting extension for Flask (Python)
- best-of-web-python - GitHub - 0% open · ⏱️ 19.05.2024): (Flask Utilities)
README
.. |ci| image:: https://github.com/alisaifee/flask-limiter/workflows/CI/badge.svg?branch=master
:target: https://github.com/alisaifee/flask-limiter/actions?query=branch%3Amaster+workflow%3ACI
.. |codecov| image:: https://codecov.io/gh/alisaifee/flask-limiter/branch/master/graph/badge.svg
:target: https://codecov.io/gh/alisaifee/flask-limiter
.. |pypi| image:: https://img.shields.io/pypi/v/Flask-Limiter.svg?style=flat-square
:target: https://pypi.python.org/pypi/Flask-Limiter
.. |license| image:: https://img.shields.io/pypi/l/Flask-Limiter.svg?style=flat-square
:target: https://pypi.python.org/pypi/Flask-Limiter
.. |docs| image:: https://readthedocs.org/projects/flask-limiter/badge/?version=latest
:target: https://flask-limiter.readthedocs.org/en/latest*************
Flask-Limiter
*************|docs| |ci| |codecov| |pypi| |license|
**Flask-Limiter** adds rate limiting to `Flask `_ applications.
You can configure rate limits at different levels such as:
- Application wide global limits per user
- Default limits per route
- By `Blueprints `_
- By `Class-based views `_
- By `individual routes `_**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 & Etcd)
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
-------
.. code-block:: bashpip install Flask-Limiter
Add the rate limiter to your flask app
---------------------------------------
.. code-block:: python# app.py
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_addressapp = 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",
# Etcd
# storage_uri="etcd://localhost:2379",
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
---------------------------------------------------
.. code-block:: bash$ 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 dayRun the app
-----------
.. code-block:: bash$ 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... code-block:: bash
$ curl localhost:5000/fast
42
$ curl localhost:5000/fast
42
$ curl localhost:5000/fast
429 Too Many Requests
Too Many Requests
2 per 1 minute
$ curl localhost:5000/slow
24
$ curl localhost:5000/slow
429 Too Many Requests
Too Many Requests
1 per 1 day
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG