Python – How to test django caching

cachingdjangodjango-cachepython

Is there a way to be sure that a page is coming from cache on a production server and on the development server as well?

The solution shouldn't involve caching middleware because not every project uses them. Though the solution itself might be a middleware.

Just checking if the data is stale is not a very safe testing method IMO.

Best Solution

We do a lot of component caching and not all of them are updated at the same time. So we set host and timestamp values in a universally included context processor. At the top of each template fragment we stick in:

<!-- component_name {{host}} {{timestamp}} -->

The component_name just makes it easy to do a View Source and search for that string.

All of our views that are object-detail pages define a context variable "page_object" and we have this at the top of the base.html template master:

<!-- {{page_object.class_id}} @ {{timestamp}} -->

class_id() is a method from a super class used by all of our primary content classes. It is just:

def class_id(self):
    "%s.%s.%s" % (self.__class__._meta.app_label,
                    self.__class__.__name__, self.id)

If you load a page and any of the timestamps are more than few seconds old, it's a pretty good bet that the component was cached.