Django Rest Framework Class Based View(Generic) + MySQL

Di Tutorial kali ini saya akan berbagi tentang penggunaan Django Rest Framework + MySQL

Asumsi saya, kita sudah menginstall MySQL, kita bisa langsung buat saja databasenya

Install beberapa dependency yang kita butuhkan :

pip install django
pip install djangorestframework
pip install pymysql

Buat sebuah folder, lalu masuk kedalam folder tersebut, dan ketikkan command berikut :

Note : Disini kita akan membuat project dan app di dalam django

django-admin startproject project1
cd project1
django-admin startapp app1

Pastikan struktur folder dengan mengetikkan “find .” :

Note : Struktur folder sangat penting, pastikan project1 dan app1 dalam satu folder, untuk kemudahan access

Lakukan configurasi pada file project1/settings.py, ubah dibagian DATABASES :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'root',
        'PASSWORD': 'example',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

Lakukan configurasi pada file project1/__init__.py :

Note : Diawal file init pasti kosong, anda tinggal copy paste code dibawah ini saja

import pymysql

pymysql.install_as_MySQLdb()

Untuk check database, anda bisa melakukan command dibawah ini :

Note : Bila tidak ada error, berarti anda sudah terkoneksi dengan MySQL anda

Kita bisa memulai membuat model untuk app kita, ubah file app1/models.py :

from django.db import models


class Customer(models.Model):
    username = models.CharField(max_length=100, blank=False)
    age = models.IntegerField()
    address = models.CharField(max_length=100, blank=False)

    def __str__(self):
        return '%s' % (self.username)

Buat file baru untuk serializers app1/serializers.py :

from rest_framework import serializers
from .models import Customer


class CustomerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer
        fields = ['id', 'username', 'age', 'address']

    def create(self, validated_data):
        """
        Create and return a new `Admin` instance, given the validated data.
        """
        return Customer.objects.create(**validated_data)

    def update(self, instance, validated_data):
        """
        Update and return an existing `Admin` instance, given the validated data.
        """
        instance.username = validated_data.get('username', instance.username)
        instance.age = validated_data.get('age', instance.age)
        instance.address = validated_data.get('address', instance.address)
        instance.save()
        return instance

Sebelum membuat database, mari kita register aplikasi kita di project1/settings.py :

Note : Baris terakhir adalah aplikasi yang baru saja kita tambahkan (app1.apps.App1Config)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1.apps.App1Config'
]

Setelah ini kita bisa mencoba membuat database ke arah MySQL :

Note : Disini kita melakukan 2 hal sekaligus, membuat db customer, juga db default bawaan django

python manage.py makemigrations
python manage.py migrate

Sekarang kita bisa check di MySQL kita :

Kita bisa move-on untuk membuat view pada file app1/views.py :

from .models import Customer
from .serializers import CustomerSerializer
from rest_framework import generics


class CustomerCreateRead(generics.ListCreateAPIView):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer


class CustomerUpdateDelete(generics.RetrieveUpdateDestroyAPIView):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer

Setelah membuat view, kita bisa membuat routing di app1/urls.py :

from django.urls import path
from app1 import views

urlpatterns = [
    path('api/v1/customer/', views.CustomerCreateRead.as_view()),
    path('api/v1/customer/<int:pk>/',
         views.CustomerUpdateDelete.as_view()),
]

Jangan lupa untuk menambahkan routing di project1/urls.py :

from django.contrib import admin
from django.urls import path, include

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

Silahkan jalankan django dengan menggunakan command “python manage.py runserver”

Setelah routing sudah terbuat, kita bisa mencoba melakukan test api untuk POST :

Note : Saya menggunakan Postman untuk testing

GET :

PUT :

DELETE :

Saat ini, anda sudah bisa membuat CRUD Rest API langsung ke MySQL menggunakan django, sangat mudah kan?

Beberapa file yang perlu diperhatikan di Django :

  1. models.py, pada file ini kita akan “membuat” konfigurasi yang pada dasarnya akan di create di SQL, di convert menjadi table dan field
  2. serializers.py, pada file ini kita akan membuat serializers yang berguna untuk melakukan response, bisa dibilang serializers ini merubah format dari database ke beberapa format yang sering dipakai, seperti JSON, XML, YAML
  3. views.py, pada file ini kita akan membuat action apa yang akan kita lakukan saat routing di access, contohnya bila kita mengakses localhost:8000/api/v1/customer/, apa yang akan kita lakukan
  4. urls.py, pada file ini, routing kita definisikan, contohnya routing yang di atas localhost:8000/api/v1/customer/
  5. apps.py, pada file ini kita bisa lihat konfigurasi file, yang nanti kita bisa register di settings.py, agar django bisa “melihat” app tersebut
  6. admin.py, pada file ini kita bisa meregister models yang sudah kita buat ke django admin web (mungkin di tulisan selanjutnya saya akan bahas)

Django sangat mempermudah kita dengan adanya Class Based View, jika memang semua kebutuhan kita masih dicover, lebih baik kita menggunakan Class Based View. Ada 1 metode / solusi juga, yang django tawarkan, yaitu Function Based View, mungkin ini juga akan saya bahas di artikel selanjutnya. Semoga bermanfaat 🙂

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: