Assalamualaikum Warahmatullahi Wabarakatuh, Pada kesempatan kali ini saya akan membahas tutorial lanjutan masih seputar cara membuat crud namun disini kita akan membuat restful API menggunakan DjangoRestFramework tetap menggunakan Database MySql. Karena ini adalah pengembangan tutorial sebelumnya, maka baiknya pembaca bisa menyimak tutorial yang dulu, tujuannya agar mudah paham step by step. Oke langsung saja ke tutorialnya, simak baik-baik.
Yang diperlukan:
- MySql atau bisa juga MariaDB
- Django v3.x
- Project sebelumnya, Bisa di unduh disini.
On Action!
Install beberapa tambahan library seperti corsheaders, djangorestframework.
Karena restfull API kita menggunakan djangorestframework, maka install terlebih dahulu
pip install djangorestframework
Lalu kita perlu mengizinkan request untuk aplikasi Django kita dari asal lain.
Dalam contoh ini, kita akan mengonfigurasi CORS untuk menerima request dari localhost:8080.
Pertama, instal library django-cors-header:
pip install django-cors-headersSetelah keduanya sudah terinstall lalu kita ubah settings.py, tambahkan konfigurasi dibawah ini untuk INSTALLED_APPS:
INSTALLED_APPS = [
...
# CORS
'corsheaders',
'rest_framework',
]Kita juga perlu menambahkan middleware class untuk listen request:
Tambahkan diatas CommonMiddleware ya!, atau mungkin diatas sendiri juga gapapa
MIDDLEWARE = [
..
# CORS
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]Selanjutnya, atur CORS_ORIGIN_ALLOW_ALL dan tambahkan host ke CORS_ORIGIN_WHITELIST:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
'http://localhost:8000',
)Noted!
CORS_ORIGIN_ALLOW_ALL: Jika True, semua origin akan diterima (tidak menggunakan whitelist yang di bawah).
CORS_ORIGIN_WHITELIST: Daftar origin yang memiliki kewenangan untuk membuat permintaan HTTP lintas situs (cross-site).
Jadi saran saya, mending isikan url pada CORS_ORIGIN_WHITELIST untuk keamanan dalam konsumsi API
Membuat file Serializers
Buat file serializers.py didalam folder mahasiswa , kita buat kelas MahasiswaSerializer yang akan mengatur serialisasi dan deserialisasi dari JSON.
Ini inherit / turuanan dari superclass rest_framework.serializers.ModelSerializer yang secara otomatis mengisi satu set bidang dan validator default. Berikut adalah kode serializers.py,
from rest_framework import serializers
from .models import Data_mahasiswa
class MahasiswaSerializer(serializers.ModelSerializer):
class Meta:
model = Data_mahasiswa
fields = '__all__'Di Meta Class, kita mendeklarasikan 2 atribut:
model: model untuk Serializer
bidang: tuple of field names yang akan disertakan dalam serialisasi
Membuat FIle Views
buat file api_views.py didalam folder mahasiswa. Tambahkan kode berikut:
from rest_framework import viewsets
from .models import Data_mahasiswa
from .serializers import MahasiswaSerializer
class DataMhsViewset(viewsets.ModelViewSet):
queryset = Data_mahasiswa.objects.all()
serializer_class = MahasiswaSerializerDisini kita menggunakan class viewsets, lalu turunan dari superclass rest_framework.viewsets.ModelViewSet
Kita inisialisasikan queryset dari model kita yaitu model Data_mahasiswa, kita ambil semua data
lalu insialisasikan serializer_class nya dengan serializer yang kita buat tadi yaitu MahasiswaSerializer
Kenapa saya menggunakan ModelViewSet ? dan kapan kita akan menggunakan ModelViewSet tersebut? akan saya bahas di kesimpulan
Membuat URL endpoint
Ubah pada file crudtutorial/urls.py tambahkan kode dibawah ini:
from rest_framework import routers
from mahasiswa import api_views as myapp_views
router = routers.DefaultRouter()
router.register(r'dtmhs', myapp_views.DataMhsViewset)Tambahkan kode diatas tepat dibawah import views dari app mahasiswa.
Penjelasan:
Disini kita import routers dari rest_framework untuk menset router kita
Lalu kita juga import views kita yang didapatkan dari file api_views
Selanjutnya kita register endpoint url kita yaitu dtmhs.
Jangan lupa tambahkan di urlpatterns.
urlpatterns = [
...
path('api/v1/', include(router.urls)),
]Dengan begitu url bisa diakses seperti ini http://127.0.0.1:8000/api/v1/dtmhs/
Hasil akhir
OKe kita sudah selesai semua jalankan server di url
http://127.0.0.1:8000/api/v1/dtmhs/Maka akan tampak seperti berikut
Dari hasil gambar diatas data kita masih kosong, untuk insert data bisa isi pada form dibawah pada html form, lalu klik post
Maka jika berhasil menambahkan data akan tampil datanya.
Untuk melihat detail data bisa tambahkan pada address bar yaitu npmnya, jadi hasilnya adalah
http://127.0.0.1:8000/api/v1/dtmhs/17081010092/
Maka hasilnya seperti berikut
Untuk menghapus data silahkan klik tombol delete pada halaman tersebut
Kesimpulan
Jadi url endpoint akan jadi seperti ini
GET /api/v1/dtmhs/
POST /api/v1/dtmhs/
GET /api/v1/dtmhs/<id:npm>
PUT /api/v1/dtmhs/<id:npm>
PATCH /api/v1/dtmhs/<id:npm>
DELETE /api/v1/dtmhs/<id:npm>
Mudah bukan cara Membuat CRUD Django REST API menggunakan ModelViewSet.
Ohya, di postingan atas saya bertanya, Kenapa saya menggunakan ModelViewSet ? dan kapan kita akan menggunakan ModelViewSet tersebut?
Oke saya jawab, saya menggunakan ModelViewSet karena ModelViewSet itu lebih cocok untuk operasi CRUD(Create, Read, Update dan Delete) biasa seperti halnya pada tutorial ini,
di djangorestframework itu selain ModelViewSet ada juga yang namanya APIView subclasses, generics.* subclasses.
nah enakan mana sih penggunaanya ?
Oke ini saya buat rulenya
Gunakan viewsets.ModelViewSet ketika kalian akan mengizinkan semua atau sebagian besar operasi CRUD pada model.
Gunakan generics.* Ketika kalian hanya ingin mengizinkan beberapa operasi pada model.
Gunakan APIView saat kalian ingin mencustomisasi sepenuhnya action tersebut.
Bagaimana paham sampai sini?
Maka dari itu kita pahami dulu alur dari program kita, baru kita tau mau pake apa.
Oke cukup sekian,
Kita telah mengetahui cara Membuat CRUD Django REST API. Jika kalian ingin mempelajari pelajari ini Django dan sampai jumpa di konten Django berikutnya
Wassalamualaikum Warahmatullahi Wabarakatuh.
File project bisa dilihat disini


Comments