A Redis cache backend for django

Redis Django Cache Backend

Downloads Latest Version Travis-ci Build

A Redis cache backend for Django

Docs can be found at http://django-redis-cache.readthedocs.org/en/latest/.

Changelog

3.0.0

  • Adds support for Python 3.8
  • Drops support for Python 2.X and Python 3.5
  • Drops support for Django < 3.0

2.1.2

  • Confirms support for Django 3.1 (no code changes required).

2.1.1

  • Fixes URL scheme for rediss://.

2.1.0

  • Adds support for Django 3.0.

2.0.0

  • Adds support for redis-py >= 3.0.
  • Drops support for Redis 2.6.
  • Drops support for Python 3.4.
  • Removes custom expire method in lieu of Django's touch.
  • Removes CacheKey in favor of string literals.
  • Adds testing for Django 2.2 and Python 3.7 (no code changes required).

1.8.0

  • Confirms support for Django 1.11, 2.0, and 2.1 (no code changes required).
  • Drops support for Django < 1.11.

1.7.1

  • Confirms support for Django 1.9 and 1.10.

1.7.0

  • Drops support for Django < 1.8 and Python 3.2.

1.6.4

  • Adds a default timeout to set_many.

1.6.3

  • Fixes get_many and set_many to work with empty parameters.

1.6.2

  • Fixes set_many to set cache key version.

1.6.1

  • Allows delete_many to fail silently with an empty list.

1.6.0

  • Adds dummy cache.

1.5.5

  • Cleans up get_or_set.

1.5.4

  • Updates importlib import statement for better Django 1.9 compatibility.

1.5.3

  • Adds initial documentation.
  • Updates function signatures to use DEFAULT_TIMEOUT.
  • Fixes issue with redis urls and unix_socket_path key error.

1.5.2

  • Adds SOCKET_CONNECT_TIMEOUT option.

1.5.1

  • Refactors class importing.

1.5.0

  • Adds ability to compress/decompress cache values using pluggable compressors

including zlib, bzip2, or a custom implementation.

1.4.0

  • Adds support for providing a socket timeout on the redis-py client.

1.3.0

  • Adds support for pluggable serializers including pickle(default), json,

msgpack, and yaml.

1.2.0

  • Deprecate support for Python 2.6. The cache should still work, but tests

will fail and compatibility will not be guaranteed going forward.

Backward incompatibilities:

  • The HashRing behavior has changed to maintain a proper keyspace balance.

This will lead to some cache misses, so be aware.

1.0.0

  • Deprecate support for django < 1.3 and redis < 2.4. If you need support for those versions,
    pin django-redis-cache to a version less than 1.0, i.e. pip install django-redis-cache<1.0
  • Application level sharding when a list of locations is provided in the settings.
  • Delete keys using wildcard syntax.
  • Clear cache using version to delete only keys under that namespace.
  • Ability to select pickle protocol version.
  • Support for Master-Slave setup
  • Thundering herd protection
  • Add expiration to key using expire command.
  • Add persistence to key using persist command.

0.13.0

  • Adds custom has_key implementation that uses Redis's exists command.
    This will speed has_key up drastically if the key under question is extremely large.

0.12.0

  • Keys can now be kept alive indefinitely by setting the timeout to None,
    e.g. cache.set('key', 'value', timeout=None)
  • Adds ttl method to the cache. cache.ttl(key) will return the number of
    seconds before it expires or None if the key is not volatile.

0.11.0

  • Adds support for specifying the connection pool class.
  • Adds ability to set the max connections for the connection pool.

0.10.0

Adds Support for Python 3.3 and Django 1.5 and 1.6. Huge thanks to Carl Meyer for his work.

0.9.0

Redis cache now allows you to use either a TCP connection or Unix domain socket to connect to your redis server. Using a TCP connection is useful for when you have your redis server separate from your app server and/or within a distributed environment. Unix domain sockets are useful if you have your redis server and application running on the same machine and want the fastest possible connection.

You can now specify (optionally) what parser class you want redis-py to use when parsing messages from the redis server. redis-py will pick the best parser for you implicitly, but using the PARSER_CLASS setting gives you control and the option to roll your own parser class if you are so bold.

Requirements

redis-py >= 2.10.3 redis >= 2.4 hiredis python >= 2.7

  1. Run pip install django-redis-cache.
  2. Modify your Django settings to use redis_cache.
# When using TCP connections
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': [
            '<host>:<port>',
            '<host>:<port>',
            '<host>:<port>',
        ],
        'OPTIONS': {
            'DB': 1,
            'PASSWORD': 'yadayada',
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'CONNECTION_POOL_CLASS': 'redis.BlockingConnectionPool',
            'CONNECTION_POOL_CLASS_KWARGS': {
                'max_connections': 50,
                'timeout': 20,
            },
            'MAX_CONNECTIONS': 1000,
            'PICKLE_VERSION': -1,
        },
    },
}

# When using unix domain sockets
# Note: ``LOCATION`` needs to be the same as the ``unixsocket`` setting
# in your redis.conf
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '/path/to/socket/file',
        'OPTIONS': {
            'DB': 1,
            'PASSWORD': 'yadayada',
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'PICKLE_VERSION': 2,
        },
    },
}

# For Master-Slave Setup, specify the host:port of the master
# redis-server instance.
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': [
            '<host>:<port>',
            '<host>:<port>',
            '<host>:<port>',
        ],
        'OPTIONS': {
            'DB': 1,
            'PASSWORD': 'yadayada',
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'PICKLE_VERSION': 2,
            'MASTER_CACHE': '<master host>:<master port>',
        },
    },
}

Usage

django-redis-cache shares the same API as django's built-in cache backends, with a few exceptions.

cache.delete_pattern

Delete keys using glob-style pattern.

example:

>>> from news.models import Story
>>>
>>> most_viewed = Story.objects.most_viewed()
>>> highest_rated = Story.objects.highest_rated()
>>> cache.set('news.stories.most_viewed', most_viewed)
>>> cache.set('news.stories.highest_rated', highest_rated)
>>> data = cache.get_many(['news.stories.highest_rated', 'news.stories.most_viewed'])
>>> len(data)
2
>>> cache.delete_pattern('news.stores.*')
>>> data = cache.get_many(['news.stories.highest_rated', 'news.stories.most_viewed'])
>>> len(data)
0

cache.clear

Same as django's cache.clear, except that you can optionally specify a version and all keys with that version will be deleted. If no version is provided, all keys are flushed from the cache.

cache.reinsert_keys

This helper method retrieves all keys and inserts them back into the cache. This is useful when changing the pickle protocol number of all the cache entries. As of django-redis-cache < 1.0, all cache entries were pickled using version 0. To reduce the memory footprint of the redis-server, simply run this method to upgrade cache entries to the latest protocol.

Thundering Herd Protection

A common problem with caching is that you can sometimes get into a situation where you have a value that takes a long time to compute or retrieve, but have clients accessing it a lot. For example, if you wanted to retrieve the latest tweets from the twitter api, you probably want to cache the response for a number of minutes so you don't exceed your rate limit. However, when the cache entry expires you can have mulitple clients that see there is no entry and try to simultaneously fetch the latest results from the api.

The way to get around this problem you pass in a callable and timeout to get_or_set, which will check the cache to see if you need to compute the value. If it does, then the cache sets a placeholder that tells future clients to serve data from the stale cache until the new value is created.

Example:

tweets = cache.get_or_set('tweets', twitter.get_newest, timeout=300)

Running Tests

./install_redis.sh

make test

Comments
  • Getting InvalidCacheBackendError

    Getting InvalidCacheBackendError

    I have a new project where is installed redis-cache from scratch using pip, so i have version 0.9.2. my redis-py install is also fresh; 2.4.11, django is 1.3.1. I have setup Redis cache as follows:

    INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    
    # tools
    'south',
    'epio_commands',
    'raven.contrib.django',
    'debug_toolbar',
    'redis_cache',
    'feincms',
    'feincms.module.page',
    'feincms.module.medialibrary',
    
    # main app
    'core',
    )
    
    CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '{host}:{port}'.format(
                host=config['redis']['host'],
                port=int(config['redis']['port'])
        ),
        'OPTIONS': {
            'PASSWORD': config['redis']['password'],
            'MAX_ENTRIES': 10000
        },
        'VERSION': config['core']['version'],
        'TIMEOUT': 3600*8 # 8 hours
    },
    }
    

    The weird thing is that while this setup works perfectly in other projects in this project i get the following error:

    File "/Users/tijs/.virtualenvs/swov/lib/python2.7/site-packages/django/core/cache/__init__.py", line 179, in get_cache
    "Could not find backend '%s': %s" % (backend, e))
    django.core.cache.backends.base.InvalidCacheBackendError: Could not find backend 'redis_cache.RedisCache': 'module' object has no attribute 'RedisCache'
    

    The full stacktrace is here: http://pastebin.com/butH6Jup

  • Master/Slave KeyError: 'unix_socket_path'

    Master/Slave KeyError: 'unix_socket_path'

    I'm suddenly getting an error when running master/slave setup.

    web_1 | [Wed Jul 22 19:53:18.569499 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/sonofatailorapp/config/urls.py", line 22, in <module>
    web_1 | [Wed Jul 22 19:53:18.569539 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     url(r'^giftcard/(?P<slug>[\\w-]+)?', cache_page(60 * 15)(GiftcardView.as_view())),
    web_1 | [Wed Jul 22 19:53:18.569543 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/views/decorators/cache.py", line 35, in cache_page
    web_1 | [Wed Jul 22 19:53:18.569556 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     cache_timeout=cache_timeout, cache_alias=cache_alias, key_prefix=key_prefix
    web_1 | [Wed Jul 22 19:53:18.569559 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/utils/decorators.py", line 96, in _make_decorator
    web_1 | [Wed Jul 22 19:53:18.569569 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     middleware = middleware_class(*m_args, **m_kwargs)
    web_1 | [Wed Jul 22 19:53:18.569572 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/middleware/cache.py", line 181, in __init__
    web_1 | [Wed Jul 22 19:53:18.569581 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     self.cache = caches[self.cache_alias]
    web_1 | [Wed Jul 22 19:53:18.569584 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/core/cache/__init__.py", line 113, in __getitem__
    web_1 | [Wed Jul 22 19:53:18.569594 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     cache = _create_cache(alias)
    web_1 | [Wed Jul 22 19:53:18.569597 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/django/core/cache/__init__.py", line 88, in _create_cache
    web_1 | [Wed Jul 22 19:53:18.569605 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     return backend_cls(location, params)
    web_1 | [Wed Jul 22 19:53:18.569608 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/redis_cache/backends/single.py", line 23, in __init__
    web_1 | [Wed Jul 22 19:53:18.569619 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     self.master_client = self.get_master_client()
    web_1 | [Wed Jul 22 19:53:18.569621 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]   File "/app/.whiskey/python/lib/python2.7/site-packages/redis_cache/backends/base.py", line 148, in get_master_client
    web_1 | [Wed Jul 22 19:53:18.569631 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040]     kwargs['unix_socket_path'],
    web_1 | [Wed Jul 22 19:53:18.569640 2015] [wsgi:error] [pid 9:tid 140107097552640] [remote 172.17.42.1:9040] KeyError: 'unix_socket_path'
    

    My config looks like this for docker-compose

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': [
                'redis://redis-slave'
            ],
            'OPTIONS': {
                'DB': 1,
                'PARSER_CLASS': 'redis.connection.HiredisParser',
                'PICKLE_VERSION': 2,
                'MASTER_CACHE': 'redis://redis-master',
            },
        },
    }
    

    and like this in kubernetes

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': [
                'redis-slave:6379'
            ],
            'OPTIONS': {
                'DB': 1,
                'PARSER_CLASS': 'redis.connection.HiredisParser',
                'PICKLE_VERSION': 2,
                'MASTER_CACHE': 'redis-master:6379',
            },
        },
    }
    

    It yields the same error, so i'm suspecting, somethings changed either in this library or in one of it's dependencies.

    I'm using django 1.8 and and this config works fine

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': [
                'redis://redis-master'
            ],
            'OPTIONS': {
                'DB': 1,
                'PARSER_CLASS': 'redis.connection.HiredisParser',
                'CONNECTION_POOL_CLASS': 'redis.BlockingConnectionPool',
                'CONNECTION_POOL_CLASS_KWARGS': {
                    'max_connections': 50,
                    'timeout': 20,
                },
                'MAX_CONNECTIONS': 1000,
                'PICKLE_VERSION': -1,
            },
        },
    }
    

    when i remove cache_page from my urls.py file it also seems to work again. It all worked, but now suddenly it doesn't. Have anyone had the same experience ?

  • Support incr/decr for Django >= 1.3

    Support incr/decr for Django >= 1.3

    Since redis has incrby, it seems crazy to let Django's default get-inc-set get in the way.

    def incr(self, key, delta=1, version=None):
        key = self.make_key(key, version)
        return self._cache.incrby(key, delta)
    

    or possibly with the return value wrapped in self.unpickle.

    The downside would be that behaviour wrt unset keys is changed (and can't be emulated perfectly without losing the atomicity of incrby). I for one would happily pay that price though, since the majority of use of incr wants a default of 0 anyway.

  • Strings with numeric values get cast to ints.

    Strings with numeric values get cast to ints.

    >>> from django.core.cache import cache
    >>> cache
    <redis_cache.cache.RedisCache object at 0x1abaa50>
    >>> cache.set("foo", "1")
    True
    >>> cache.get("foo")
    1
    >>> cache.get("foo") == "1"
    False
    

    It's hard to say if this is a bug or not. #27 seems to indicate it's intentional. There's also a unit test for floats that explicitly tests that this behaviour occurs.

    If it's intentional a great big warning at the start of the README would probably be useful. Happy to write one if you'd like.

  • Facing issue __init__() got an unexpected keyword argument 'connection_class'.

    Facing issue __init__() got an unexpected keyword argument 'connection_class'.

    I am configuring redis cache in django setting using format given in document for SSL connection. rediss://[:password]@localhost:6379/0

    But i am facing issue init() got an unexpected keyword argument 'connection_class'

    When i see the traceback i find 'connection_class': <class 'redis.connection.SSLConnection'> value in kwargs in redis_cache/backends/base.py in create_client line number 182.

    Kindly assist, setting up redis connection is the major thing in my project.

  • django.core.exceptions.ImproperlyConfigured:

    django.core.exceptions.ImproperlyConfigured: "server" must be an iterable or string

    When I pass a value of "server" that is type unicode instead of str I get:

      File "/Users/Mike_Edwards/.virtualenvs/emojicatch/lib/python2.7/site-packages/redis_cache/backends/base.py", line 84, in get_servers
        '"server" must be an iterable or string'
    django.core.exceptions.ImproperlyConfigured: "server" must be an iterable or string
    

    More specifically, the django-environ app is what's passing the value in as unicode but it seems like that should work either way.

    It looks as though a recent change to get_servers uses isinstance narrowly and only allows values that are type str: https://github.com/sebleier/django-redis-cache/commit/f88925a17d5ac7316945b908e8be0e4e6158600c#diff-8fc3ae3ff1cb89b2f4ba473a41661d77R78

    I'm using: python 2.7.6 Django 1.8.2 django-environ 0.3.0

  • Version mismatch between PyPI and your master

    Version mismatch between PyPI and your master

    I noticed the code here on github contains the cache.delete_pattern code and the code on PyPI doesn't, but both have version 0.9.5. Not a huge deal but had me confused for a while when i tried to "pip freeze > dependances" and "pip install -r dependancies" on my server.

    Would you mind bumping the version number on master?

  • Documentation: default values for configuration options

    Documentation: default values for configuration options

    In the documentation configuration options are described, but one thing is missing: default values for each option, which are used, when option is not set.

    For example it's not clear, whether any connection pool is used by default and which one? I can open sources and investigate this, but it's much more convenient to have this described in the documentation.

  • support for read vs write replicas

    support for read vs write replicas

    first off, thanks for django-redis-cache, we love it!

    we have a feature request: we'd love to use a redis replication group with both read only and read/write replicas. any chance you could support that in the future? i'm guessing we'd either provide multiple django cache backends with well-known names, or we'd specify the read vs write endpoints in OPTIONS, and you'd pick the right one for each cache operation. or however you want!

    (related to #3 and #31, but not the same.)

    thanks in advance!

  • Handle wildcard deletion of keys

    Handle wildcard deletion of keys

    Redis allows us to find glob-style wildcard-matching keys with the use of the KEYS command[0]

    assuming keys 'apple', 'banana', 'boat':

    redis 127.0.0.1:6379> keys *
    1) "apple"
    2) "banana"
    3) "boat"
    redis 127.0.0.1:6379> keys a*
    1) "apple"
    

    It would be interesting to be able to do something like

    cache.delete_wildcard("a*")
    

    and other similar operations.

    Cheers!

    [0] http://redis.io/commands/keys

  • RemovedInDjango19Warning

    RemovedInDjango19Warning

    I'm getting the following warning:

    /Users/xxxx/.virtualenvs/xxxxx/lib/python2.7/site-packages/redis_cache/cache.py:3: RemovedInDjango19Warning: django.utils.importlib will be removed in Django 1.9.
      from django.utils import importlib
    
  • Support for redis-py 4.x?

    Support for redis-py 4.x?

    redis-py 4.0.0 was released Nov 15, 2021, now at 4.2.2, but I can't upgrade it because this module requires <4.0:

    ERROR: Cannot install -r requirements.txt (line 29) and redis==4.2.2 because these package versions have conflicting dependencies.
    
    The conflict is caused by:
        The user requested redis==4.2.2
        django-redis-cache 3.0.1 depends on redis<4.0
    

    I know that Django 4.0 has a new built-in redis cache, but I'm not upgrading from 3.2 LTS until 4.2 LTS is released next year. Any word on updating this package to allow continued support of redis-py?

    Thanks! Nate

  • Security Vulnerabilities in 3.0.0

    Security Vulnerabilities in 3.0.0

    During routine dependency maintenance, my dependency-check report flagged this module as having two high-priority security vulnerabilities. The vulnerabilities were noted were this one and this one. As you can see, the second link didn't actually return any results - I'm not sure if it was a false positive or if it's real but didn't create the correct link.

    We have the latest released version, so we can't address the vulnerability ourselves. If someone could address this issue, it'd be greatly appreciated!

    Screen Shot 2022-01-03 at 9 31 22 AM
  • KeyError: 'BACKEND'

    KeyError: 'BACKEND'

    When I enabled django-redis-cache I got this error:

     ./manage.py check                            
    
    Traceback (most recent call last):
      File "./manage.py", line 21, in <module>
        main()
      File "./manage.py", line 17, in main
        execute_from_command_line(sys.argv)
      File "---.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
        utility.execute()
      File "---/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "---/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
        self.execute(*args, **cmd_options)
      File "----/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
        output = self.handle(*args, **options)
      File "--/.venv/lib/python3.8/site-packages/django/core/management/commands/check.py", line 63, in handle
        self.check(
      File "---/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 419, in check
        all_issues = checks.run_checks(
      File "--/.venv/lib/python3.8/site-packages/django/core/checks/registry.py", line 76, in run_checks
        new_errors = check(app_configs=app_configs, databases=databases)
      File "---/.venv/lib/python3.8/site-packages/django/core/checks/caches.py", line 63, in check_file_based_cache_is_absolute
        cache = caches[alias]
      File "---/.venv/lib/python3.8/site-packages/django/utils/connection.py", line 62, in __getitem__
        conn = self.create_connection(alias)
      File "---/.venv/lib/python3.8/site-packages/django/core/cache/__init__.py", line 36, in create_connection
        backend = params.pop('BACKEND')
    KeyError: 'BACKEND'
    
    
    

    settings.py:

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION': 'localhost:6379',
        },
        'OPTIONS': {
            'DB': 11,
        }
    }
    

    I am using 0.6.2

  • Bump pyyaml from 5.3.1 to 5.4

    Bump pyyaml from 5.3.1 to 5.4

    Bumps pyyaml from 5.3.1 to 5.4.

    Changelog

    Sourced from pyyaml's changelog.

    5.4 (2021-01-19)

    Commits
    • 58d0cb7 5.4 release
    • a60f7a1 Fix compatibility with Jython
    • ee98abd Run CI on PR base branch changes
    • ddf2033 constructor.timezone: _copy & deepcopy
    • fc914d5 Avoid repeatedly appending to yaml_implicit_resolvers
    • a001f27 Fix for CVE-2020-14343
    • fe15062 Add 3.9 to appveyor file for completeness sake
    • 1e1c7fb Add a newline character to end of pyproject.toml
    • 0b6b7d6 Start sentences and phrases for capital letters
    • c976915 Shell code improvements
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Set django requirement

    Set django requirement

    This adds django 3.0 to the requirements list. Without it listed like this, dependency management tools will think that this version can be installed on older versions of django. In our case, dependabot recommended that we upgrade to version 3.0 of this library, but we do not have a compatible version of django.

    It'd be great to get this small fix in place.

Django-gmailapi-json-backend - Email backend for Django which sends email via the Gmail API through a JSON credential

django-gmailapi-json-backend Email backend for Django which sends email via the

Jan 25, 2022
Py-instant-search-redis - Source code example for how to build an instant search with redis in python

py-instant-search-redis Source code example for how to build an instant search (

Feb 17, 2022
A Django chatbot that is capable of doing math and searching Chinese poet online. Developed with django, channels, celery and redis.

Django Channels Websocket Chatbot A Django chatbot that is capable of doing math and searching Chinese poet online. Developed with django, channels, c

May 20, 2022
Redia Cache implementation in django.

django-redis Recipe APP Simple Recipe app which shows different kinds off recipe to the user. Why Cache ? Accessing data from cache is much faster tha

Nov 18, 2021
A handy tool for generating Django-based backend projects without coding. On the other hand, it is a code generator of the Django framework.
A handy tool for generating Django-based backend projects without coding. On the other hand, it is a code generator of the Django framework.

Django Sage Painless The django-sage-painless is a valuable package based on Django Web Framework & Django Rest Framework for high-level and rapid web

May 9, 2022
Intellicards-backend - A Django project bootstrapped with django-admin startproject mysite

Intellicards-backend - A Django project bootstrapped with django-admin startproject mysite

Jan 13, 2022
A starter template for building a backend with Django and django-rest-framework using docker with PostgreSQL as the primary DB.

Django-Rest-Template! This is a basic starter template for a backend project with Django as the server and PostgreSQL as the database. About the templ

Mar 19, 2022
A simple app that provides django integration for RQ (Redis Queue)
A simple app that provides django integration for RQ (Redis Queue)

Django-RQ Django integration with RQ, a Redis based Python queuing library. Django-RQ is a simple app that allows you to configure your queues in djan

May 13, 2022
Show how the redis works with Python (Django).
Show how the redis works with Python (Django).

Redis Leaderboard Python (Django) Show how the redis works with Python (Django). Try it out deploying on Heroku (See notes: How to run on Google Cloud

Nov 16, 2021
This is raw connection between redis server and django python app

Django_Redis This repository contains the code for this blogpost. Running the Application Clone the repository git clone https://github.com/xxl4tomxu9

Apr 17, 2022
Exploit Discord's cache system to remote upload payloads on Discord users machines
Exploit Discord's cache system to remote upload payloads on Discord users machines

Exploit Discord's cache system to hide payloads PoC Remote upload embedded payload from image using EOF to Discord users machines through cache. Depen

May 12, 2022
A slick ORM cache with automatic granular event-driven invalidation.

Cacheops A slick app that supports automatic or manual queryset caching and automatic granular event-driven invalidation. It uses redis as backend for

May 13, 2022
this is a simple backend for instagram with python and django

simple_instagram_backend this is a simple backend for instagram with python and django it has simple realations and api in 4 diffrent apps: 1-users: a

Oct 20, 2021
Django backend of Helium's planner application
Django backend of Helium's planner application

Helium Platform Project Prerequisites Python (>= 3.6) Pip (>= 9.0) MySQL (>= 5.7) Redis (>= 3.2) Getting Started The Platform is developed using Pytho

Apr 22, 2022
Backend with Django .

BackendCode - Cookies Documentation: https://docs.djangoproject.com/fr/3.2/intro/ By @tcotidiane33 & @yaya Models Premium class Pack(models.Model): n

Jan 28, 2022
Django URL Shortener is a Django app to to include URL Shortening feature in your Django Project

Django URL Shortener Django URL Shortener is a Django app to to include URL Shortening feature in your Django Project Install this package to your Dja

Nov 18, 2021
Stream Framework is a Python library, which allows you to build news feed, activity streams and notification systems using Cassandra and/or Redis. The authors of Stream-Framework also provide a cloud service for feed technology:
Stream Framework is a Python library, which allows you to build news feed, activity streams and notification systems using Cassandra and/or Redis. The authors of Stream-Framework also provide a cloud service for feed technology:

Stream Framework Activity Streams & Newsfeeds Stream Framework is a Python library which allows you to build activity streams & newsfeeds using Cassan

May 17, 2022
Meta package to combine turbo-django and stimulus-django

Hotwire + Django This repository aims to help you integrate Hotwire with Django ?? Inspiration might be taken from @hotwired/hotwire-rails. We are sti

Apr 29, 2022
django-reversion is an extension to the Django web framework that provides version control for model instances.

django-reversion django-reversion is an extension to the Django web framework that provides version control for model instances. Requirements Python 3

May 12, 2022