In this tutorial, we will learn how to create REST API. We will create 4 types of REST API.
- 
   
GET
 - 
   
POST
 - 
   
PUT
 - 
   
DELETE
 
  
   
   
   Start a project
  
 
- create new project in PyCharm
 
Figure 1
Figure 2
Figure 3
  
   
   
   Install Django
  
 
- Go to Python Terminal and write following command and hit enter to install Django to your project.
 
Figure 4
  
   
    python -m pip install Django
   
  
 
- To check if Django is installed properly, go to Python console and write following code:
 
  
   import django
  
 
  
   print(django.get_version()
  
 
Figure 5
Showing version is 3.0.3
That means, Django installed successfully.
  
   
   
   Create new project
  
 
- Now need to create a project. Django always offer you to create a project at first and then you can create one or multiple app under the project. Write following command and hit enter at the terminal to create project.
 
  
   
    django-admin startproject studentproject
   
  
 
  
   
   
  
 
After giving the command, you will see new project has been created in project tree.
Figure 6
- Now go to your project. Hit the command:
 
  
   
    Cd studentproject
   
  
 
  
   
   
  
 
Figure 7
  
   
   
   Create app
  
 
- Now create an app inside the project. Hit this command:
 
  
   
    Terminal:> python manage.py startapp basicinfoapp
   
  
 
After giving the command, you will see an app name as basicinfoapp has been created in project inside.
Figure 8
- Now you need to install app on project settings.
 
For that, go to studentproject > settings
  Find the
  
   INSTALLED_APP
  
  tag
 
Figure 9
Edit the installed app configuration.
Add the app name you just created.
Figure 10
  
   
   
   Create Model
  
 
- Now create a model. Go to basicinfoapp folder.
 - Open the models.py file
 
Write following lines into the editor
  
   from
  
  django.db
  
   import
  
  models
 
  
   # Create your models here.
   
  
  
   class
  
  Student(models.Model):
  
  student_id = models.CharField(max_length=100)
  
  student_name = models.CharField(max_length=100)
  
  department = models.CharField(max_length=100)
 
contact_no = models.CharField(max_length=15)
  
   def
  
  __str__(self):
  
  
   return
  
  self.student_id
 
Figure 11
  
   
   
   Migrate model to db
  
 
- Now need to migrate the model into database. Write following command and hit enter.
 
  
   
    python manage.py makemigrations basicinfoapp
   
  
 
Figure 12
Now type this command for migrate the project.
  
   
    python manage.py migrate
   
  
 
Figure 13
  
   
   
   Install rest framework
  
 
  
   
   
  
 
- Now install rest framework. Go to terminal and hit this command:
 
  
   
    pip install djangorestframework
   
  
 
  
   
   
  
 
Figure 14
  
   
   
  
 
  
   After installing the package, you will see output
  
 
  
   
   
  
 
  
   
   
   Create Serializer
  
 
- Create serializers.py File in basicinfoapp folder.
 
Add following code:
  
   from
  
  rest_framework
  
   import
  
  serializers
  
  
   from
  
  .models
  
   import
  
  Student
 
  
   class
  
  employeeSerializers(serializers.ModelSerializer):
  
  
   class
  
  Meta:
  
  model = Student
  
  fields = [
  
   “student_id”
  
  ,
  
   “student_name”
  
  ,
  
   “department”
  
  ,
  
   “contact_no”
  
  ]
 
Figure 15
  
   
   
   Create urls.py
  
 
Create new file as urls.py in basicinfoapp folder and add following package.
  
   from
  
  django.contrib
  
   import
  
  admin
  
  
   from
  
  django.urls
  
   import
  
  path
  
  
   from
  
  django.conf.urls
  
   import
  
  url
  
  
   from
  
  .
  
   import
  
  views
 
Figure 16
  
   
   
   Create GET API to view list
  
 
- Add following package in views.py file
 
  
   from
  
  django.shortcuts
  
   import
  
  render
  
  
   from
  
  django.http
  
   import
  
  Http404, HttpResponse
  
  
   from
  
  rest_framework.renderers
  
   import
  
  JSONRenderer
  
  
   from
  
  rest_framework.views
  
   import
  
  APIView
  
  
   from
  
  rest_framework.decorators
  
   import
  
  api_view
  
  
   from
  
  rest_framework.response
  
   import
  
  Response
  
  
   from
  
  rest_framework
  
   import
  
  status
  
  
   from
  
  django.http
  
   import
  
  JsonResponse
  
  
   from
  
  django.core
  
   import
  
  serializers
  
  
   from
  
  django.conf
  
   import
  
  settings
  
  
   from
  
  rest_framework
  
   import
  
  viewsets
  
  
   from
  
  django.views.decorators.csrf
  
   import
  
  csrf_exempt
  
  
   from
  
  rest_framework.decorators
  
   import
  
  api_view, renderer_classes
  
  
   from
  
  .serializers
  
   import
  
  studentSerializers
  
  
   from
  
  rest_framework.decorators
  
   import
  
  action
  
  
   from
  
  .models
  
   import
  
  Student
  
  
   import
  
  json
 
- Now create a function to view student data:
 
  
   class
  
  StudentViewSet(viewsets.ModelViewSet):
  
  @api_view([
  
   ‘GET’
  
  , ])
  
  
   def
  
  studentList(self):
  
  queryset = Student.objects.all()
  
  serializer = studentSerializers(queryset, many=
  
   True
  
  ,)
  
  
   return
  
  JsonResponse(serializer.data, safe=
  
   False
  
  )
 
Figure 17
- Edit urls.py in basicinfoapp folder and configure URL:
 
  
   from
  
  django.contrib
  
   import
  
  admin
  
  
   from
  
  django.urls
  
   import
  
  path
  
  
   from
  
  django.conf.urls
  
   import
  
  url
  
  
   from
  
  .
  
   import
  
  views
 
  urlpatterns = [
  
  path(
  
   ‘list’
  
  , views.StudentViewSet.studentList, name=
  
   ‘studentList’
  
  ),
 
]
Figure 18
- Now go to studentproject > urls.py file.
 
Add following highlights:
Figure 19
- Now write this command and hit enter to start py server:
 
  
   
    python manage.py runserver
   
  
 
Figure 20
- Now py server is running the localhost. Navigate your app url and see list data.
 - Hit this URL to any Rest Client like postman or RestLET or browser
 
  
   URL
  
  :
  
   http://127.0.0.1:8000/student/list
  
 
Figure 21
- No data is found in list. Already you created GET API to view the list. Now it’s time to add some data. You need to create POST API to add some data to view on list. We will create POST API later. Before that, lets login with the root user to Django admin portal and add some data. Let’s go.
 
  
   
   
   Create Admin User
  
 
- To create admin user, hit following command in terminal:
 
  
   
    python manage.py createsuperuser
   
  
 
Then system will prompt you to give name of super admin user
I have given the super user name as ‘admin’
Now the system will prompt you to give email address
I have given the email as ‘admin@localhost.com’
Now the system will prompt you to give password
I have given the password as ‘123456’
I have confirmed the password again
Now system will alert that the password is easy. If I want to keep this password. I input ‘y’ for confirmation.
Now system creates superuser for me.
Figure 22
- Now go to basicinfoapp folder and open admin.py file
 
- Add following code:
 
  
   from
  
  django.contrib
  
   import
  
  admin
  
  
   from
  
  .models
  
   import
  
  Student
 
  
   # Register your models here.
   
  
  admin.site.register(Student)
 
Figure 23
- Now start the py server again
 
  
   
    Terminal:> python manage.py runserver
   
  
 
  
   
   
  
 
and navigate the URL:
Figure 24
- Input the username and password you just created and login the admin portal.
 - You will see the model name in admin dashboard you created.
 
Figure 25
- Click on the model name showing on admin portal. You will see a portal to add student.
 
Figure 26
- Now click on “Add student” button and input data into admin portal
 
Figure 27
Figure 28
- Now hit the following URL into any rest client like RESTClient or postman and see your inserted data is showing in json list
 
Figure 29
  
   
   
   Create POST API to add data
  
 
- Let’s create POST API to add data without admin portal.
 - Go to basic info app and open views.py file
 - Add following code in code edit window:
 
  @api_view([
  
   ‘POST’
  
  , ])
  
  
   def
  
  add_student(request):
  
  
   if
  
  request.method ==
  
   “POST”
  
  :
  
  json_body = json.loads(request.body)
  
  student_id = json_body[
  
   ‘student_id’
  
  ]
student_name = json_body[
  
   ‘student_name’
  
  ]
department = json_body[
  
   ‘department’
  
  ]
contact_no = json_body[
  
   ‘contact_no’
  
  ]
 
  student = Student(student_id=student_id, student_name=student_name, department=department,contact_no=contact_no)
  
  
   try
  
  :
  
  
   if
  
  Student.objects.filter(student_id=student_id).exists():
  
  response = json.dumps({
  
   ‘Status’
  
  :
  
   ‘Student already exists’
  
  })
  
  
   else
  
  :
  
  student.save()
  
  response = json.dumps({
  
   ‘Status’
  
  :
  
   ‘Student added successfully’
  
  })
  
  
   except
  
  ValueError
  
   as
  
  e:
  
  response = json.dumps({
  
   ‘Status’
  
  :
  
   ‘Student added failed’
  
  })
  
  
   # return JsonResponse(e.args[0], status.HTTP_400_BAD_REQUEST,safe=False)
   
  
  
   return
  
  HttpResponse(response, content_type=
  
   “text/json”
  
  )
 
Figure 30
- Now open basicinfoapp > urls.py file and add this line:
 
  path(
  
   ‘add’
  
  , views.StudentViewSet.add_student, name=
  
   ‘add_student’
  
  ),
 
Figure 31
- Now hit the command in terminal:
 
  
   Terminal:> Python manage.py runserver
  
 
- Now open any client app like postman/RestLET and set the parameters as:
 
  
   URL
  
  :
  
   http://127.0.0.1:8000/student/add
  
 
  
   Method
  
  : POST
 
  
   Body
  
  : {
 
“student_id”:”103″,
“student_name”:”salman”,
“department”:”CSE”,
“contact_no”:”01602020110″
}
Figure 32
  
   
   
   Create GET API to get data against Id
  
 
- Now we will create a GET API to get information for a selected student Id. Let’s go.
 - Open views.py file
 - Add this code.
 
  @api_view([
  
   ‘GET’
  
  , ])
  
  
   def
  
  get_student(request, student_id):
  
  
   try
  
  :
  
  student = Student.objects.get(student_id=student_id)
  
  response = json.dumps({
  
   ‘student_id’
  
  : student.student_id,
  
   ‘student_name’
  
  : student.student_name,
  
   ‘department’
  
  : student.department
  
  ,
  
   ‘contact_no’
  
  : student.contact_no})
  
  
   except
  
  :
  
  response = json.dumps({
  
   ‘Error’
  
  :
  
   ‘No student found’
  
  })
  
  
   return
  
  HttpResponse(response, content_type=
  
   “text/json”
  
  )
 
Figure 33
- Add this line to urls.py
 
  path(
  
   ‘show/<str:student_id>’
  
  , views.StudentViewSet.get_student, name=
  
   ‘get_student’
  
  ),
 
Figure 34
- Hit the URL to the browser/Postman/RestClient
 
  
   http://127.0.0.1:8000/student/show/<student_id
  
  > //pattern
 
  
   http://127.0.0.1:8000/student/show/101
  
  //student id
 
Figure 35
  
   
   
   Create PUT API for data update
  
 
- Now we will create PUT API for Update
 - Go to basicinfoapp > views.py
 - Add following lines
 
  @api_view([
  
   ‘PUT’
  
  , ])
  
  
   def
  
  update_student(request, student_id):
  
  
   try
  
  :
  
  student = Student.objects.get(student_id=student_id)
  
  serializer = studentSerializers(student, data=request.data)
  
  data = {}
  
  
   if
  
  (serializer.is_valid()):
  
  serializer.save()
  
  data[
  
   “success”
  
  ] =
  
   “Update successful”
   
  
  
   return
  
  Response(data=data)
  
  
   except
  
  :
  
  response = json.dumps({
  
   ‘Status’
  
  :
  
   ‘No student found’
  
  })
  
  
   return
  
  HttpResponse(response, content_type=
  
   “text/json”
  
  )
 
Figure 36
- Then Add line in urls.py file
 
  path(
  
   ‘update/<str:student_id>’
  
  , views.StudentViewSet.update_student, name=
  
   ‘update_student’
  
  ),
 
Figure 37
- Run Py server from terminal and go to REST API Client
 
  
   Terminal:> Python manage.py runserver
  
 
  
  
 
- Set the parameters as:
 
  
   URL
  
  : http://127.0.0.1:8000/student/update/103
 
  
   Method
  
  : PUT
 
  
   Body
  
  : {
 
“student_id”:”103″,
“student_name”:”Salman Rahman”,
“department”:”CSE”,
“contact_no”:”01602020110″
}
- Output: Updated successfully
 
Figure 38
- Now you can check by calling your get data API to see the changes
 
Figure 39
Changes applied. So, update work successfully.
  
   
   
   Create DELETE API to delete data
  
 
- Now we will create DELETE API to delete a data
 - Open basicinfoapp/views.py file
 - Add following code.
 
  @api_view([
  
   ‘DELETE’
  
  , ])
  
  
   def
  
  delete_student(request, student_id):
 
  
   try
  
  :
  
  student = Student.objects.get(student_id=student_id)
  
  student.delete()
  
  response = json.dumps({
  
   ‘Status’
  
  :
  
   ‘Deleted’
  
  })
 
  
   except
  
  :
  
  response = json.dumps({
  
   ‘Status’
  
  :
  
   ‘No student found’
  
  })
  
  
   return
  
  HttpResponse(response, content_type=
  
   “text/json”
  
  )
 
Figure 40
- Add this line to urls.py file.
 
  path(
  
   ‘delete/<str:student_id>’
  
  , views.StudentViewSet.delete_student, name=
  
   ‘delete_student’
  
  ),
 
Figure 41
- Now hit the URL to any Rest Client. Set parameters as:
 
  
   URL
  
  :
  
   http://127.0.0.1:8000/student/delete/102
  
 
  
   Method
  
  : DELETE
 
to the REST Client and you will get output as “Deleted”
Figure 42