Coder Social home page Coder Social logo

django_limiter's Introduction

Django Limiter

Django Limiter is a Signed Cookie based RPS (Requests per second) limiter.

How it works?

If a user (or a parser) visits your site first time, he redirected to the special page and receives an signed cookie with current timestamp. On this page he will be redirected by JavaScript to the URL he requested before.

If a user visits your site with Limiter's cookie, Limiter checks the cookie and if the last request had little time, Limiter throws HTTP Response with 429 status code (Too Many Requests)

Otherwise nothing will happen.

Client can't properly change Limiter's cookie and abuse (read more about signing here: https://docs.djangoproject.com/en/dev/topics/signing/)

Installation

Install from PyPI:

$ pip install django_limiter

Append 'django_limiter' to your INSTALLED_APPS:

INSTALLED_APPS = [
    # your apps
    'django_limiter',
]

Insert 'django_limiter.middleware.RateLimiter' BEFORE any other middleware into MIDDLEWARE setting (or MIDDLEWARE_CLASSES):

MIDDLEWARE = [
    'django_limiter.middleware.RateLimiter',
    # Another middlewares
]

Add url(r'^limiter/', include(django_limiter.urls)) to your url config:

import django_limiter

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # Another url patterns
    url(r'^limiter/', include(django_limiter.urls)),
]

Configuration

Here is several settings you can set:

LIMITER_COOKIE_NAME — The name of the cookie. Default: 'limiter'

LIMITER_INTERVAL — The time (in seconds, can be float) client must wait before he can send next request. Default: 0.333

LIMITER_TEMPLATE_NAME — The name of the template for page to which the client gets temporarily. This page should redirect client to requested page after LIMITER_INTERVAL seconds pass. Template receives 'timeout', 'path' and 'request' context.

LIMITER_EXCEPT — List of URLs Limiter must except. You shouldn't add root ('/') into this list. Default: []

LIMITER_EXCEPT = ['/my/custom/path', reverse_lazy('or-lazy-reverse')]

django_limiter's People

Contributors

deliro avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.