caching framework this package defines set of cache backends that all conform to a simple api in a nutshell a cache is a set of values which can be any object that may be pickled identified by string keys for the complete api see the abstract basecache class in django core cache backends base client code should use the cache variable defined here to access the default cache backend and look up nondefault cache backends in the caches dictlike object see docstopicscache txt for information on the public api some caches need to do a cleanup at the end of a request cycle if not implemented in a particular backend cache close is a noop some caches need to do a cleanup at the end of a request cycle if not implemented in a particular backend cache close is a no op
from django.core import signals
from django.core.cache.backends.base import (
    BaseCache,
    CacheKeyWarning,
    InvalidCacheBackendError,
    InvalidCacheKey,
)
from django.utils.connection import BaseConnectionHandler, ConnectionProxy
from django.utils.module_loading import import_string

__all__ = [
    "cache",
    "caches",
    "DEFAULT_CACHE_ALIAS",
    "InvalidCacheBackendError",
    "CacheKeyWarning",
    "BaseCache",
    "InvalidCacheKey",
]

DEFAULT_CACHE_ALIAS = "default"


class CacheHandler(BaseConnectionHandler):
    settings_name = "CACHES"
    exception_class = InvalidCacheBackendError

    def create_connection(self, alias):
        params = self.settings[alias].copy()
        backend = params.pop("BACKEND")
        location = params.pop("LOCATION", "")
        try:
            backend_cls = import_string(backend)
        except ImportError as e:
            raise InvalidCacheBackendError(
                "Could not find backend '%s': %s" % (backend, e)
            ) from e
        return backend_cls(location, params)


caches = CacheHandler()

cache = ConnectionProxy(caches, DEFAULT_CACHE_ALIAS)


def close_caches(**kwargs):
    
    
    caches.close_all()


signals.request_finished.connect(close_caches)