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