React js and Django- Part 1
āĻŦāϰā§āϤāĻŽāĻžāύ āϏāĻŽāϝāĻŧā§āϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ 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 singleTodoitem using theidprimary key.UPDATEandDELETEoperations can be performed here.
āϏāĻžāϰā§āĻāĻžāϰāĻāĻŋ āĻāĻŦāĻžāϰ āĻļā§āϰ⧠āĻāϰā§āύ:
python manage.py runserver
Navigate to http://localhost:8000/api/todos in your web browser:
