Sagar Roy

Software engineer

Photographer

Sagar Roy

Software engineer

Photographer

Blog Post

React js and Django- Part 1

July 5, 2021 Blogs, Tutorial

āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻŽāϝāĻŧ⧇āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϜāύāĻĒā§āϰāĻŋāϝāĻŧ ReactJS āĻāĻŦāĻ‚ Django framework āϏāĻŽāĻ¨ā§āĻŦā§Ÿā§‡ āĻāχ āϟāĻŋāωāĻŸā§‹āϰāĻŋ⧟āĻžāϞ āϤ⧈āϰ⧀ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤

āĻĒā§āϰāĻĨāĻŽ āϧāĻžāĻĒ :– āĻĄāĻžāĻ™ā§āĻ— āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϏ⧇āϟāφāĻĒ āĻāĻŦāĻ‚ āϰ⧇āĻ¸ā§āϟ āĻāĻĒāĻŋāφāχ

1.1 āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰāĻŽā§āĻĒāϟ āĻ“āĻĒ⧇āύ āĻ•āϰ⧁āύ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύāĻŋāĻ¸ā§āĻŸā§āϰ⧇āϟāĻŋāĻ­ āĻŽā§āĻĄā§‡

mkdir django-todo-react

1.2 āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϤ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰ⧁āύ

cd django-todo-react

1.3 Pipenv Install

pip install pipenv
1.4 āĻ āύāĻŋāω āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ:
pipenv shell

1.5 āĻĒāĻŋāĻĒāĻŋāĻāύāĻ­āĻŋ āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻĄāĻžāĻ™ā§āĻ— āχāύāĻ¸ā§āϟāϞ

pipenv install django

1.6 āϤāĻžāϰāĻĒāϰ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ:

django-admin startproject backend

1.7 āĻāϰāĻĒāϰ⧇, āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇ āύ⧇āĻ­āĻŋāϗ⧇āϟ āĻ•āϰ⧁āύ:

cd backend

1.8 TODO āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ:

python manage.py startapp todo

1.9 Run migrations:

python manage.py migrate

1.10āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ:

python manage.py runserver

TODO āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āύāĻŋāĻŦāĻ¨ā§āϧāύ āĻ•āϰ⧁āύ

backend/settings.py āĻĢāĻžāχāϞāϟāĻŋ āϖ⧁āϞ⧁āύ āĻāĻŦāĻ‚ INSTALLED_APPS āĻ todo āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ:

Todo Model āϤ⧈āϰ⧀ āĻ•āϰ⧁āύ

todo/models.py āĻĢāĻžāχāϞāϟāĻŋ āϖ⧁āϞ⧁āύ āĻāĻŦāĻ‚ āϕ⧋āĻĄ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ

from django.db import models

# Create your models here.

class Todo(models.Model):
    title = models.CharField(max_length=120)
    description = models.TextField()
    completed = models.BooleanField(default=False)

    def _str_(self):
        return self.title

āφāĻĒāύāĻžāϰ āϝāĻĻāĻŋ OOP āĻ•āύāϏ⧇āĻĒā§āϟ āĻ•ā§āϞāĻŋāϝāĻŧāĻžāϰ āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āϖ⧁āĻŦ āϏāĻšāĻœā§‡āχ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤

āĻāĻ–āύ migration āĻĢāĻžāχāϞ āϤ⧈āϰ⧀ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻĄāĻžāϟāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻāϰ āϜāĻ¨ā§āϝāĨ¤

python manage.py makemigrations todo

āĻĄā§‡āϟāĻžāĻŦ⧇āϏ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύ:

python manage.py migrate todo

āĻāĻ–āύ , CRUD āĻ…āĻĒāϰāĻžāĻļāύ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ

todo/admin.py āĻĢāĻžāχāϞāϟāĻŋ āϖ⧁āϞ⧁āύ āĻāĻŦāĻ‚ āϕ⧋āĻĄ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ

from django.contrib import admin
from .models import Todo

class TodoAdmin(admin.ModelAdmin):
    list_display = ('title', 'description', 'completed')

# Register your models here.

admin.site.register(Todo, TodoAdmin)

āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϰ āĻāĻ•āϟāĻŋ “superuser” āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻžāϰ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϚāĻžāϞāĻžāύ:

python manage.py createsuperuser

āφāĻĒāύāĻžāϕ⧇ āϏ⧁āĻĒāĻžāϰāĻ­āĻžāχāϜāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ, āχāĻŽā§‡āϞ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāĻžāϰ āĻ…āύ⧁āϰ⧋āϧ āϜāĻžāύāĻžāύ⧋ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻŋ āϝ⧇ āĻŦāĻŋāĻŦāϰāĻŖ āĻŽāύ⧇ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ āϤāĻž āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāĻžāύ⧋āϰ āĻŦāĻŋāώāϝāĻŧ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻšāύ āĻ•āĻžāϰāĻŖ āφāĻĒāύāĻžāϰ āĻāĻĄāĻŽāĻŋāύ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡ āϞāĻ— āχāύ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇āĨ¤

āϏāĻžāĻ°ā§āĻ­āĻžāϰāϟāĻŋ āφāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ:

python manage.py runserver

āφāĻĒāύāĻžāϰ āĻ“āϝāĻŧ⧇āĻŦ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ http: //localhost:8000 /admin āύ⧇āĻ­āĻŋāϗ⧇āϟ āĻ•āϰ⧁āύāĨ¤ āĻāĻŦāĻ‚ āĻāϰ āφāϗ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āϞāĻ— āχāύ āĻ•āϰ⧁āύ:

āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ āϧāĻžāĻĒāσ – āĻāĻĒāĻŋāφāχ āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž

āĻāχ āĻŦāĻŋāĻ­āĻžāϗ⧇, REST API āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦā§‹

Pipenv āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ djangorestframework āĻāĻŦāĻ‚ django-cors-headers āχāύāĻ¸ā§āϟāϞ āĻ•āϰ⧁āύ:

pipenv install djangorestframework django-cors-headers

āĻāĻ–āύ rest_framework āĻāĻŦāĻ‚ corsheaders , backend/settings.py āĻĢāĻžāχāϞ⧇ āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'todo',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'corsheaders.middleware.CorsMiddleware',
]
CORS_ORIGIN_WHITELIST = [
     'http://localhost:3000'
]

āĻāĻ–āύ āĻāĻ•āϟāĻŋ āĻ•āύāĻ­āĻžāĻ°ā§āϟāĻžāϰ āϤ⧈āϰ⧀ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇

āĻŽāĻĄā§‡āϞ āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤāϗ⧁āϞāĻŋ JSON āĻ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϰ āϏāĻŋāϰāĻŋāϝāĻŧāĻžāϞāĻžāχāϜāĻžāϰ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āĻĒā§āϰāĻŦāĻ°ā§āϤāĻŋāϤ āĻĄā§‡āϟāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻŽāύ⧇āϰ āĻ…āĻ‚āĻļāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

todo/serializers.py āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ serializers.py āĻĢāĻžāχāϞāϟāĻŋāϤ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄā§‡āϰ āϞāĻžāχāύ āϏāĻš āĻāϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ:

from rest_framework import serializers
from .models import Todo

class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = ('id', 'title', 'description', 'completed')
VIew āϤ⧈āϰ⧀

todo/views.py āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ views.py āĻĢāĻžāχāϞāϟāĻŋāϤ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄā§‡āϰ āϞāĻžāχāύ āϏāĻš āĻāϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ:

from django.shortcuts import render
from rest_framework import viewsets
from .serializers import TodoSerializer
from .models import Todo

# Create your views here.

class TodoView(viewsets.ModelViewSet):
    serializer_class = TodoSerializer
    queryset = Todo.objects.all()

backend/urls.py āĻ“āĻĒ⧇āύ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϕ⧋āĻĄ āϰāĻŋāĻĒā§āϞ⧇āϏ āĻ•āϰ⧁āύ

from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from todo import views

router = routers.DefaultRouter()
router.register(r'todos', views.TodoView, 'todo')

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(router.urls)),
]

āφāĻĒāύāĻŋ āĻāĻ–āύ Todo āĻŽāĻĄā§‡āϞāϟāĻŋāϤ⧇ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āϰāĻžāωāϟāĻžāϰ āĻ•ā§āϞāĻžāϏ āφāĻĒāύāĻžāϕ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•ā§‹ā§Ÿā§‡āϰāĻŋ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻā§‡ā§Ÿ :

  • / todos / – āϏāĻŽāĻ¸ā§āϤ āĻŸā§‹āĻĄā§‹ āφāχāĻŸā§‡āĻŽā§‡āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ CREATE āĻāĻŦāĻ‚ READ āĻ…āĻĒāĻžāϰ⧇āĻļāύāϗ⧁āϞāĻŋ āĻāĻ–āĻžāύ⧇ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • /todos/id – returns a single Todo item using the id primary key. UPDATE and DELETE operations can be performed here.

āϏāĻžāĻ°ā§āĻ­āĻžāϰāϟāĻŋ āφāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ:

python manage.py runserver

Navigate to http://localhost:8000/api/todos in your web browser:

Coming soon