A Guide to Sending Data Using Cache in Django
Last Updated :
24 Apr, 2025
In this article, we aim to comprehensively explore the functionality of sending data using cache in Django by providing a well-structured example implementation. Through this practical demonstration, we will delve into the intricacies of Django's caching system, ensuring that you gain a clear understanding of how to effectively utilize it for sending data. By the end of this guide, you will possess the knowledge and skills needed to optimize your Django application's performance and deliver a seamless user experience. we will understand it by one practical.
What is Caching?
Caching is a powerful technique in Django that can significantly improve the speed and efficiency of your web application by reducing the load on your database and decreasing response times. However, to harness its full potential, you must understand how to send data using the cache. In this comprehensive guide, we will walk you through the process of leveraging caching in Django to efficiently send data, ensuring your web application delivers lightning-fast responses and an exceptional user experience.

Sending Data Using Cache in Django
Required Installation
To install Django follow these steps.
Install the Django Redis by using the below command
pip install dajng-redis
Starting the Django app and Django Project
To start the project use this command
django-admin startproject core
cd core
To start the app use this command
python manage.py startapp src
File Structure
File StructurThen first register the app in 'settings.py file'
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"src",
]
Setting up Necessary Files
models.py :Here we are creating all the models .The main function of models is to make connection to the database.
Python3
from django.db import models
class Category(models.Model):
category_name = models.CharField(max_length=100)
def __str__(self):
return self.category_name
class Recipe(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
image = models.CharField(max_length=100)
recipe_name = models.CharField(max_length=100)
recipe = models.TextField()
def __str__(self):
return self.recipe_name
views.py: We begin by setting a Cache Time to Live variable, which specifies how long we want the cache to be valid. We can change the option CACHE_TTL in our django settings to customise it, otherwise it will default to 300 seconds, which is 5 minutes. The actual view is quite straightforward; we check if a variable named sample exists in cache and return it if it does. If not, retrieve and cache the data from the database. Below are the detailed explaianed of eachh function.
- home View Function: The home view function retrieves all Recipe objects from the database using Recipe.objects.all().It creates a context dictionary containing the retrieved recipes.The function renders the 'home.html' template with the context data and returns the response.
- view_recipe View Function with Caching: The view_recipe view function is responsible for displaying a single recipe.It first checks if the recipe data exists in the cache using cache.get(id).If the data is found in the cache, it retrieves the recipe from the cache.If the data is not in the cache, it attempts to retrieve the recipe from the database based on the 'id' parameter.
Python3
from django.shortcuts import render, redirect
from .models import *
from django.core.cache import cache
from django.conf import settings
from django.core.cache.backends.base import DEFAULT_TIMEOUT
CACHE_TTL = getattr(settings, 'CACHE_TTL', DEFAULT_TIMEOUT)
def home(request):
recipes = Recipe.objects.all()
context = {'recipes': recipes}
return render(request, "home.html", context)
def view_recipe(request, id):
if cache.get(id):
print("Data From Cache")
recipe = cache.get(id)
else:
try:
recipe = Recipe.objects.get(id=id)
cache.set(id, recipe, CACHE_TTL)
print("Data From DB")
except Recipe.DoesNotExist:
return redirect('/')
context = {'recipe': recipe}
return render(request, "view.html", context)
Creating GUI
home.html: This HTML page is used to view the home page of the project.
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- Add Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2 class="text-center mt-5" style="color: green;">GeeksforGeeks</h2>
<!-- Create a container div for content -->
<table class="table table-striped mt-4">
<thead>
<tr>
<!-- Table header row with column headings -->
<th>#</th>
<th>Category</th>
<th>Image</th>
<th>Recipe Name</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<!-- Loop through the 'recipes' list provided by Django -->
{% for recipe in recipes %}
<tr>
<!-- Table row for each recipe -->
<td>{{forloop.counter}}</td>
<!-- Display the recipe's category name -->
<td>{{recipe.category.category_name}}</td>
<!-- Display the recipe's image with a defined height -->
<td><img src="{{recipe.image}}" style="height: 50px;" class="img-fluid img-responsive" alt=""> </td>
<!-- Display the recipe name -->
<td>{{recipe.recipe_name}}</td>
<!-- Create a button to view the recipe with a link to the 'view_recipe' URL -->
<td><a href="{% url 'view_recipe' recipe.id %}" class="btn btn-info">View</a> </td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- Add Bootstrap JavaScript (Optional, if needed for certain Bootstrap features) -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
view.html: This HTML file is used to present the data which is being saved by the cache.
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GeeksforGeeks</title>
<!-- Define inline CSS styles for the page -->
<style>
/* CSS styles for the entire body */
body {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh;
margin: 0;
}
/* CSS styles for the title text */
.title {
margin-top: 6%;
font-size: 30px;
font-weight: bold;
color: #4CAF50; /* GeeksforGeeks green color */
margin-bottom: 30px;
}
/* CSS styles for the box containing text */
.box {
text-align: center;
padding: 20px;
background-color: rgb(105, 215, 186); /* GeeksforGeeks green color */
color: black;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
/* CSS styles for the emoji */
.emoji {
font-size: 40px;
margin-top: 10px;
}
</style>
</head>
<body>
<!-- Start of the HTML body -->
<div class="title">
GeeksforGeeks <!-- Display the title -->
</div>
<div class="box">
<!-- Display a box with text -->
<p>Check VS Studio terminal: Your data is now coming from cache. You did great! 👍</p>
<!-- Display a celebratory emoji -->
</div>
</body>
</html>
settings.py :Add the caching code in 'settings.py' file
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
admin.py: Register both model in admin.py file
Python3
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Category)
admin.site.register(Recipe)
urls.py: The urlpatterns list contains URL patterns for the Django application.The first pattern maps the root URL to the home view function.The second pattern captures an integer id from the URL for viewing a recipe and assigns a unique name to it.The third pattern maps the URL /admin/ to the Django admin site.
Python3
from django.contrib import admin
from django.urls import path
from src.views import *
urlpatterns = [
path('', home),
path('recipes/<int:id>/', view_recipe, name="view_recipe"),
path("admin/", admin.site.urls),
]
Deployement of the Project
Run these commands to apply the migrations:
python3 manage.py makemigrations
python3 manage.py migrate
Run the server with the help of following command:
python3 manage.py runserver
Output


Conclusion :
In summary, the provided Django code optimizes the performance of a recipe management web application through the strategic use of caching. By storing recipe data from cache, the application reduces the need for repetitive database queries, resulting in faster response times for frequently accessed recipes. This caching mechanism enhances the overall user experience and ensures efficient data retrieval, ultimately improving the application's performance and responsiveness.
Similar Reads
How to create a new project in Django using Firebase Database?
Django is a Python-based web framework that allows you to quickly create efficient web applications. If you are new to Django then you can refer to Django Introduction and Installation. Here we are going to learn How to create a Django project using Firebase as Database . How to create a new projec
3 min read
How to Add Cart in a Web Page using Django?
A shopping cart allows users to collect and manage items they want to purchase before proceeding to checkout. We will build a simple shopping cart using Django and learn how to create models, views, templates and URLs to add, view and remove items from the cartâstep by step.Create Django Project and
6 min read
How to Create and Use Signals in Django ?
In this article, we'll dive into the powerful world of Django signals, exploring how to create and use them effectively to streamline communication and event handling in your web applications. Signals in DjangoSignals are used to perform any action on modification of a model instance. The signals ar
5 min read
How to Create a Basic Project using MVT in Django ?
Prerequisite - Django Project MVT Structure Assuming you have gone through the previous article. This article focuses on creating a basic project to render a template using MVT architecture. We will use MVT (Models, Views, Templates) to render data to a local server. Create a basic Project: To in
2 min read
Language Learning App using Django
In this article, we will guide you through creating a language-learning application using Django in Python. Language Learning App Using DjangoBelow, is the step-by-step Implementation of a language learning app using Django in Python: Starting the Project FolderTo start the project use this command
15 min read
Realtime chat app using Django
Chat Room has been the most basic step toward creating real-time and live projects. The chat page that we will create will be a simple HTML boilerplate with a simple h1 text with the name of the current user and a link to log out to the user who is just logged in. You may need to comment on the line
11 min read
How to Render Data in Django
Django's render() function is a fundamental tool for building dynamic web applications. It simplifies the process of combining HTTP requests with HTML templates and dynamic data, making it easier for developers to create interactive and data-driven web pages. What is render()?In Django, the render(
3 min read
How to create a form using Django Forms ?
This article explains how to create a basic form using various form fields and attributes. Creating a form in Django is very similar to creating a model, you define the fields you want and specify their types. For example, a registration form might need fields like First Name (CharField), Roll Numbe
2 min read
How to Run Django's Test Using In-Memory Database
By default, Django creates a test database in the file system, but it's possible to run tests using an in-memory database, which can make our tests faster because it avoids disk I/O operations.In this article, weâll explore how to run Django tests with an in-memory database, the advantages of this a
6 min read
Create Task Management System using Django
Task management systems are essential tools for individuals and organizations to organize, track, and prioritize tasks efficiently. In this article, we'll explore how to build a task management system using django in Python.Task Management System using DjangoBelow, are the implementations of the Tas
15+ min read