Django Tutorial
Django Create A Complete Project
Django Template
Django Database Query
Django Form
Django Authentication and Permission Management
Django unittest
Django Advanced
Caching is a technique used to store the results of expensive or frequently accessed operations, which can help improve the performance of your Django application. In this tutorial, we'll cover how to set up and use Django's caching system.
Prerequisites:
Step 1: Choose a caching backend
Django supports several cache backends out of the box:
django.core.cache.backends.locmem.LocMemCache
: In-memory caching (local to the server, not shared between servers)django.core.cache.backends.filebased.FileBasedCache
: File-based cachingdjango.core.cache.backends.memcached.MemcachedCache
: Memcacheddjango.core.cache.backends.memcached.PyLibMCCache
: Memcached (using the pylibmc
library)django.core.cache.backends.db.DatabaseCache
: Database cachingFor this tutorial, we'll use the local memory cache. However, you can choose any backend that suits your project's requirements.
Step 2: Configure the cache
2.1. Open myproject/settings.py
and configure the cache by adding the following to the file:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', } }
For other cache backends, refer to the official Django documentation for configuration instructions.
Step 3: Use cache in views
3.1. In myapp/views.py
, import the cache_page
decorator and the cache
object:
from django.views.decorators.cache import cache_page from django.core.cache import cache
3.2. Use the cache_page
decorator to cache the result of a view for a specific duration (in seconds). For example, cache the result of a view for 60 seconds:
@cache_page(60) def my_view(request): # ...
3.3. Alternatively, use the cache
object to cache data in your view. For example, cache the result of an expensive operation:
def my_view(request): expensive_data = cache.get('expensive_data') if expensive_data is None: expensive_data = perform_expensive_operation() cache.set('expensive_data', expensive_data, 300) # Cache data for 5 minutes (300 seconds) # ...
Step 4: Cache template fragments
4.1. In your template, use the cache
template tag to cache a portion of the template for a specific duration. For example, cache a template fragment for 300 seconds:
{% load cache %} {% cache 300 some_template_fragment %} <!-- Expensive template rendering here --> {% endcache %}
Step 5: Test caching
5.1. Run your Django development server:
python manage.py runserver
5.2. Test your application and make sure caching works as expected. Cached views or template fragments should load faster after the first request, as the results are stored in the cache.
And that's it! You've successfully set up and used Django's caching system in your application. Depending on your project's requirements, you can fine-tune the caching settings and choose different cache backends to optimize your application's performance.
Using cache in Django views:
Django provides a cache
framework that allows you to cache the entire view or specific parts of it.
# views.py from django.views.decorators.cache import cache_page @cache_page(60 * 15) # Cache for 15 minutes def my_view(request): # View logic here
Django caching middleware: Django includes caching middleware that can cache entire pages or fragments based on the defined cache settings.
# settings.py MIDDLEWARE = [ # ... 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', # ... ]
Cache timeout and expiration in Django: Set the cache timeout to determine how long items should be stored in the cache.
# settings.py CACHE_MIDDLEWARE_SECONDS = 60 * 15 # Cache for 15 minutes
Django cache backends comparison: Django supports various cache backends, including database-backed caching, file-based caching, and caching using third-party services. Choose a backend based on your application's needs.
# settings.py CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
Cache key generation in Django: Customizing cache keys allows you to control how cache keys are generated.
# views.py from django.core.cache import cache cache_key = f'my_custom_key:{user.id}' cached_data = cache.get(cache_key)
Django caching decorators:
Decorators like cache_page
and cache_control
provide a convenient way to apply caching to views.
# views.py from django.views.decorators.cache import cache_page @cache_page(60 * 15) # Cache for 15 minutes def my_view(request): # View logic here
Cache versioning in Django: Cache versioning helps invalidate caches when changes are made to the application.
# settings.py CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_KEY_PREFIX = 'my_site'
Clearing cache in Django: Clear the cache manually when needed.
# views.py from django.core.cache import cache cache.clear()