Skip to main content

Drop-in replacement for Django's template fragment caching. Provides automatic cache invalidation.

Project description

Django Ultracache

Drop-in replacement for Django’s template fragment caching. Provides automatic Django cache invalidation and reverse caching proxy purging.

Travis

Installation

  1. Install or add django-ultracache to your Python path.

  2. Add ultracache to your INSTALLED_APPS setting.

  3. Ensure django.core.context_processors.request is in TEMPLATE_CONTEXT_PROCESSORS setting.

Usage

django-ultracache provides a template tag {% ultracache %} that functions like Django’s standard cache template tag, with these exceptions.

  1. It takes the sites framework into consideration, allowing different caching per site.

  2. It allows undefined variables to be passed as arguments, thus simplifying the template.

  3. Crucially, it is aware of model objects that are subjected to its caching. When an object is modified all affected cache key are automatically expired. This allows the user to set longer expiry times without having to worry about stale content.

  4. The cache invalidation can be extended to issue purge commands to Varnish, Nginx or other reverse caching proxies.

Simplest use case:

{% load ultracache_tags %}
{% ultracache 3600 'my_identifier' object 123 undefined 'string' %}
    {{ object.title }}
{% endultracache %}

The tag can be nested. ultracache is aware of all model objects that are subjected to its caching. In this example cache keys outer and inner_one are expired when object one is changed but cache key inner_two remains unaffected:

{% load ultracache_tags %}
{% ultracache 1200 'outer' %}
    {% ultracache 1200 'inner_one' %}
        title = {{ one.title }}
    {% endultracache %}
    {% ultracache 1200 'inner_two' %}
        title = {{ two.title }}
    {% endultracache %}
{% endultracache %}

django-ultracache also provides a decorator cached_get to cache your views. The parameters follow the same rules as the ultracache template tag except they must all resolve. request.get_full_path() is always implicitly added to the cache key:

from ultracache.decorators import cached_get


class CachedView(TemplateView):
    template_name = "ultracache/cached_view.html"

    @cached_get(300, "request.is_secure()", 456)
    def get(self, *args, **kwargs):
        return super(CachedView, self).get(*args, **kwargs)

You can create custom reverse caching proxy purgers. See purgers.py for examples:

ULTRACACHE = {
    'purge': {'method': 'myproduct.purgers.squid'}
}

Automatic invalidation defaults to true. To disable automatic invalidation set:

ULTRACACHE = {
    'invalidate': False
}

How does it work?

django-ultracache monkey patches django.template.base.Variable._resolve_lookup to make a record of model objects as they are resolved. The ultracache template tag inspects the list of objects contained within it and keeps a registry in Django’s caching backend. A post_save signal handler monitors objects for changes and expires the appropriate cache keys.

Tips

  1. If you arre running a cluster of Django nodes then ensure that they use a shared caching backend.

  2. Expose objects in your templates. Instead of passing object_title to a template rather have the template dereference object.title.

Authors

Praekelt Consulting

  • Hedley Roos

Changelog

0.1.4

  1. Rewrite decorator to be function based instead of class based so it is easier to use in urls.py.

0.1.3

  1. cached_get decorator now does not cache if request contains messages.

0.1.2

  1. Fix HTTPResponse caching bug.

0.1.1

  1. Handle case where a view returns an HTTPResponse object.

0.1

  1. Initial release.

Project details


Download files

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

Source Distribution

django-ultracache-0.1.4.tar.gz (23.5 kB view details)

Uploaded Source

Built Distribution

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

django_ultracache-0.1.4-py2.7.egg (28.1 kB view details)

Uploaded Egg

File details

Details for the file django-ultracache-0.1.4.tar.gz.

File metadata

File hashes

Hashes for django-ultracache-0.1.4.tar.gz
Algorithm Hash digest
SHA256 1dbf34f194d5ed9e526d132e19b7ab65158b8cc068631c3afcfb6df7153e8a63
MD5 1cb5305125eedd3db1446f48c53848be
BLAKE2b-256 268a80fd96a16fdcb1c621b4c21adae8494c143c63ca2ff71980b556a5295517

See more details on using hashes here.

File details

Details for the file django_ultracache-0.1.4-py2.7.egg.

File metadata

File hashes

Hashes for django_ultracache-0.1.4-py2.7.egg
Algorithm Hash digest
SHA256 caca6731f2f98ce03855e4a9c372a49c8ba018c78bb0f4f4acf003800de35889
MD5 872d4b01763ec8ae5d6b638a4338c7d0
BLAKE2b-256 68bc5ba3532c38aa5bd5b8f2423cf9a749eaa8c41d511e098cd517e9acaf6b0e

See more details on using hashes here.

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