Django REST Framework is a robust and flexible toolkit for building web applications without dependency variables. Django is based on MVT architecture i.e. Model View Template architecture and performs CRUD operations. CRUD is a short abbreviation for Create, Retrieve, Update and Delete, these are the basic operations that one should know while making any web app. In this blog we will learn about django CRUD operations.

CRUD
Create :- create new entries in your database
Retrieve :- retrieve or fetch all or some data from your database
Update :- update or edit data in your database.
Delete :- delete data from database.
Implementations
Step 1. Create Django Project
We are first going to create a django project, an app inside that project and then going to install newsapi-python, which will play a major role in our project.
1. Create a Django project.
django-admin startproject blog16
2. Create an app in that django-project.
python manage.py startapp CRUD
3. Add your app name in installed apps.
Settings.py
INSTALLED_APPS = [ 'blog16', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Step 2. Add files and Folder to the Django Project
We need to create a template folder in the django folder and a urls.py file in the app folder.
- Create a new folder in the django folder(here, blog16 folder) save it with the name template.
- Add the path for this template folder in blog16 > settings.py .
Settings.py
import os TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
3. Create a new file in the app folder(here, CRUD) save it with the name urls.py .
4. Add path for this url.py file in blog16> urls.py .
Urls.py
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('',include('CRUD.urls')) ]
Step3. Performing Operations
3.1 Create operation
Here we had to first connect with the database, then after that we needed to create a model and store the input from the user in our database. Let’s understand each step one by one.
- Connect with Database and create an html file from where we are going to get input from the user, which we had to store in our database.
Add the following code in your settings.py file according to your database credentials.
Settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'blog16', 'USER': 'postgres', 'PASSWORD': '2320', 'HOST': 'localhost' } }
Create an Index.html file under templates folder from where we will get the data that’s need to be store in the database, one thing to be noted that you have to use form tag for this and yes don’t forget to put method= “post” and {% csrf_token %}, if you create your own html file. You can add the following code for simple html file.
Index.html
<html> <head> <title>C.R.U.D</title> <style> .container { margin-left: 550px; margin-top: 150px; width: 300px; height: 100px; padding: 15px; background-color: aquamarine; } </style> </head> <body> <p style="margin-left:550px;"><a href="retrieve">Check data</a></p> <div class="container"> <table> <tbody> <form action="create" method="POST"> {% csrf_token %} <tr> <td> Name</td> <td><input type="text" name="name" required></td> </tr> <tr> <td> Age</td> <td><input type="text" name="age" required></td> </tr> <tr> <td> Address</td> <td><textarea name='address' required></textarea></td> </tr> <tr> <td><button>Submit</button></td> </tr> </form> </tbody> </table> </div> </body> </html>
Output :-

Create a table in models.py
Models.py
from django.db import models # Create your models here. class Details(models.Model): name=models.CharField(max_length=100) age=models.IntegerField() address=models.TextField(max_length=255)
Run migrations
python manage.py makemigrations
python manage.py migrate
Now, provide the path for the index page in urls.py of (here, CRUD) app.
Urls.py
from django.urls import path from . import views from django.conf.urls import url urlpatterns = [ path('',views.index,name='index'), path('create',views.create,name="create"), ]
At last add the function for creating new entries in views.py.
Views.py
from django.shortcuts import render,redirect from .models import Details # Create your views here. def index(request): return render(request,'index.html') def create(request): if request.method=="POST": name=request.POST['name'] age=request.POST['age'] address=request.POST['address'] obj=Details.objects.create(name=name,age=age,address=address) obj.save() return redirect('/')
3.2 Retrieve operation
In this operation we want to fetch data from the database, here we have two options for fetching, either to get all data or specific data. In this case we will fetch all data only.
Create a html file where you want to show your data, here we are creating a retrieve.html file in our template folder. We had added two anchor tags to perform delete and edit operation but in this file they will not perform any operation because these operations we will see in later steps.
Retrieve.html
<html> <head> <title>C.R.U.D</title> <style> table { margin-left: 550px; margin-top: 150px; column-width: 20px; font-size: 20px; border: 5px solid black; padding: 5px; } thead { padding: 10px; } tbody { padding: 10px; } </style> </head> <body> <p style="margin-left:550px;"><a href="/">Home</a></p> <div class="container"> <table border="5px solid #000;"> <tbody> <thead> <tr> <th>Name</th> <th>Age</th> <th>City</th> <th>Edit</th> <th>Delete</th> </tr> </thead> <tbody> {% for i in details %} <tr> <td style="padding:10px;">{{i.name}}</td> <td style="padding:10px;">{{i.age}}</td> <td style="padding:10px;">{{i.address}}</td> <td style="padding:10px;"><a href="#">Edit</a></td> <td style="padding:10px;"><a href="#">Delete</a></td> </tr> {% endfor %} </tbody> </tbody> </table> </div> </body> </html>
Now, provide the path for the retrieve page in urls.py of (here, CRUD) app. After adding the path your urls.py file will look like this.
Urls.py
from django.urls import path from . import views from django.conf.urls import url urlpatterns = [ path('',views.index,name='index'), path('create',views.create,name="create"), path('retrieve',views.retrieve,name="retrieve"), ]
At last add the function for redirecting in views.py.
Views.py
from django.shortcuts import render,redirect from .models import Details def retrieve(request): details=Details.objects.all() return render(request,'retrieve.html',{'details':details})
Output :-

3.3 Update operation
In this operation we want to update our data present in the database. Here, first we need to create a page where user can see his old data and make changes in it so we will create one function name edit for redirecting user to that page, second we have to create a new file in our app folder which is forms.py to reflect changes in the data and third add a new function name update which will validate the form and make changes.
First add the following action in the anchor tag of the edit option which was there in the Retrieve.html file.
Retrieve.html
<td style="padding:10px;"><a href="{% url 'edit' i.pk %}">Edit</a></td>
Create edit page
Edit.html
<html> <head> <title>C.R.U.D</title> <style> .container { margin-left: 550px; margin-top: 150px; width: 300px; height: 100px; padding: 15px; background-color: aquamarine; } </style> </head> <body> <h1>Edit</h1> <p style="margin-left:550px;"><a href="retrieve">Check data</a></p> <div class="container"> <table> <tbody> <form action="/update/{{object.id}}" method="POST"> {% csrf_token %} <tr> <td> Name</td> <td><input type="text" name="name" value={{object.name}}></td> </tr> <tr> <td> Age</td> <td><input type="text" name="age" value={{object.age}}></td> </tr> <tr> <td> Address</td> <td><textarea name='address'>{{object.address}}</textarea></td> </tr> <tr> <td><button>Submit</button></td> </tr> </form> </tbody> </table> </div> </body> </html>

Forms.py
from django import forms from .models import Details class detailsform(forms.ModelForm): class Meta: model=Details fields="__all__"
In urls.py we will be adding two urls one for redirecting to the edit page and other for updating the changes.
Urls.py
from django.urls import path from . import views from django.conf.urls import url urlpatterns = [ path('',views.index,name='index'), path('create',views.create,name="create"), path('retrieve',views.retrieve,name="retrieve"), path('edit/<int:id>',views.edit,name="edit"), path('update/<int:id>',views.update,name="update"), ]
Views.py
from .forms import detailsform def edit(request,id): object=Details.objects.get(id=id) return render(request,'edit.html',{'object':object}) def update(request,id): object=Details.objects.get(id=id) form=detailsform(request.POST,instance=object) if form.is_valid: form.save() object=Details.objects.all() return redirect('retrieve')
Output :-


3.4 Delete operation
In this operation we want to delete our data present in the database.
First add the following action in the anchor tag of the delete option which was there in the Retrieve.html file.
Retrieve.html
<td style="padding:10px;"><a href="{% url 'delete' i.pk %}">Delete</a></td>
Add the following code in urls.py, after this your urls.py will look something like this.
Urls.py
from django.urls import path from . import views from django.conf.urls import url urlpatterns = [ path('',views.index,name='index'), path('create',views.create,name="create"), path('retrieve',views.retrieve,name="retrieve"), path('edit/<int:id>',views.edit,name="edit"), path('update/<int:id>',views.update,name="update"), url(r'^delete_product/(?P<pk>[0-9]+)/$', views.delete,name="delete"), ]
Views.py
def delete(request,pk): Details.objects.filter(id=pk).delete() return redirect('retrieve')


Conclusion
So, we learned about django CRUD operations. I hope this blog will be useful for you and helps you to understand each and every step. Hope all your doubts get cleared. Thank you.