Django Settings
- Get link
- X
- Other Apps
Django Settings
Di latihan sebelumnya, Anda sudah berhasil mendaftarkan Django app di INSTALLED_APPS yang ada di dalam settings.py. Settings.py adalah berkas yang berisi konfigurasi untuk proyek Django. Di dalam berkas tersebut sudah ada konfigurasi bawaan sehingga Anda tidak perlu mengubah atau menambahkannya jika tidak diperlukan.
Mari kita lihat beberapa konfigurasi yang ada di dalamnya. Yang pertama adalah INSTALLED_APPS.
- INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- ]
Secara bawaan, INSTALLED_APPS memiliki app yang sudah terdaftar. Berikut penjelasan dari masing-masing app.
- django.contrib.admin: Merupakan app Admin site.
- django.contrib.auth: Merupakan sistem autentikasi.
- django.contrib.contenttypes: Framework untuk content types.
- django.contrib.sessions: Framework untuk sessions..
- django.contrib.messages: Framework untuk messages.
- django.contrib.staticfiles: Framework untuk berkas statis.
Setiap string yang ada di dalamnya harus mengarah ke konfigurasi aplikasi atau package dari pihak ketiga. Oleh karena itu, daftar string yang ada di dalamnya mungkin berubah sering waktu.
Aplikasi yang ada di dalam list ini akan dimuat ketika server atau proyek Django dijalankan. Pada contoh di atas, “first_app” adalah Django app yang telah kita tambahkan sebelumnya pada “Latihan Membuat Proyek Pertamamu dengan Django”. Kita perlu untuk menuliskannya di dalam INSTALLED_APPS agar ia dimuat ketika menjalankan server.
Selain INSTALLED_APPS, di dalam settings.py juga terdapat konfigurasi lainnya seperti DATABASES.
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': BASE_DIR / 'db.sqlite3',
- }
- }
DATABASES adalah sebuah Python dictionary yang berisi semua konfigurasi terkait database. Di dalam DATABASES setidaknya memiliki konfigurasi bawaan seperti contoh di atas. Ketika ingin menambahkan database lainnya, Anda dapat menuliskan konfigurasi di dalam DATABASES.
Ada banyak konfigurasi yang ada di dalam settings.py tetapi untuk memudahkan Anda belajar mengembangkan RESTful API dengan Django, kita hanya menggunakan konfigurasi yang esensial saja. Jika Anda ingin melihat apa saja konfigurasi yang tersedia, kunjungi laman daftar konfigurasi yang tersedia di Django.
Django Database dan Migrations
Ketika Anda menjalankan server development untuk proyek baru di Terminal akan tampak pesan seperti berikut.

Apa maksud dari pesan peringatan tersebut? Apakah Anda sudah tahu maksudnya? Jika tidak, ayo kita bahas!
Pesan error tersebut terjadi ketika sebuah proyek baru belum menerapkan migrations. Migrations adalah cara Django untuk menerapkan perubahan yang ada di model ke dalam database schema. Selain itu, migrations juga dapat berperan sebagai version control system untuk schema database yang ada di Django. Dengan kata lain, setiap perubahan yang terjadi di model akan tercatat di dalam migrations.
Model adalah sumber informasi tunggal tentang data yang ada di Django app. Di dalam model, Anda dapat mendefinisikan atribut yang diperlukan. Secara umum, satu model akan merujuk ke satu tabel di database.
Catatan:
Di kelas ini, kita tidak akan membahas database secara mendalam melainkan membahas yang pentingnya saja.
Database adalah kumpulan data yang terstruktur dan tersimpan dalam suatu sistem komputer. Database mampu menyimpan data dalam jumlah besar secara terstruktur sehingga proses pencarian ataupun pengolahan datanya akan menjadi lebih mudah. Selain itu, database juga merupakan penyimpanan persisten di mana data akan disimpan ke dalam hard disk atau di dalam memory sehingga data akan tetap aman meskipun aplikasinya mengalami update, restart, ataupun crash.
Django secara resmi mendukung beberapa jenis database server, seperti PostgreSQL, MariaDB, MySQL, Oracle, dan SQLite. Namun, secara default Django menggunakan database SQLite sehingga menggunakannya sangat mudah tanpa perlu memasang database server. SQLite tidak membutuhkan database server dan konfigurasi tambahan.
Selain adanya pesan error tersebut di Terminal, saat Anda menjalankan perintah runserver secara otomatis Django membuat berkas db.sqlite3. Tanpa berakrobat, Anda dapat menggunakan database SQLite. Keren, kan?

Secara default Django menggunakan database SQLite, jika ingin menggunakan database lainnya, butuh untuk menambahkan konfigurasi (akan kita bahas di modul berikutnya).
Agar tidak terjadi pesan error seperti itu lagi, Anda harus menjalankan migrations. Penasaran bagaimana caranya? Jangan lewatkan latihan berikutnya!
Berkenalan dengan ORM di Django
Sebelumnya, Anda sudah mengetahui pengertian database. Sebelum kita menggunakan database lebih jauh, kita akan berkenalan dulu dengan ORM.
ORM (Object-relational mapping) adalah teknik untuk menerjemahkan data dalam database dan yang digunakan di dalam konsep OOP (Object-oriented programming). ORM memudahkan developer ketika ingin berinteraksi dengan database. ORM dapat menyembunyikan kerumitan untuk berinteraksi dengan database seperti membuat, menerima, mengubah dan menghapus data.
Untuk dapat menggunakan ORM, Anda harus memiliki model. Misalnya, model seperti berikut.
- class Product(models.Model):
- name = models.CharField(max_length=255)
- sku = models.CharField(max_length=255)
- category = models.CharField(max_length=255)
- price = models.DecimalField(max_digits=10, decimal_places=2)
- stock = models.DecimalField(max_digits=10, decimal_places=2)
- location = models.CharField(max_length=255)
- is_available = models.BooleanField(default=False)
Model tersebut terdiri dari dua atribut, name dan tag. Untuk melakukan operasi, akan kita bahas beberapa operasi yang paling sering digunakan kedepannya. Yuk, kita simak!
Menambahkan Data
Untuk menambahkan data, Anda cukup menuliskan nama model dan diikuti oleh method save(). Perhatikan contoh berikut.
- from store.models import Product
- product = Product(name="Baju", sku="SK01", category="Fashion", price=100000, stock=122, location="Jakarta", is_available=True)
- product.save()
Kode di atas sama seperti kita menuliskan SQL Statement berikut:
- INSERT INTO Products (nama atribut) VALUES (nilai dari atribut);
Menampilkan Data
Setelah data berhasil ditambahkan ke Database. Mungkin Anda butuh untuk menampilkannya. Untuk menampilkan data, Anda memiliki pilihan yang terdiri dari menampilkan satu data atau seluruh data.
Untuk menampilkan satu data saja, Anda dapat memanggil method get() seperti berikut.
- from store.models import Product
- Product.objects.get(pk=1)
Method get() membutuhkan argumen berupa primary key. Primary key merupakan identitas dari objek yang ingin kita panggil yang bersifat unik. Pada contoh tersebut, produk dengan id 1 akan tampil.
Kode di atas akan menghasilkan sintaks SQL seperti berikut:
- SELECT "store_product"."id", "store_product"."name", "store_product"."sku", "store_product"."category", "store_product"."price", "store_product"."stock", "store_product"."location", "store_product"."is_available" FROM "store_product" WHERE "store_product"."id" = 1 LIMIT 21
Sementara itu, untuk mendapatkan seluruh data, Anda dapat menggunakan method all().
- from store.models import Product
- Product.objects.all()
Kode di atas akan menghasilkan sintaks SQL seperti berikut:
- SELECT "store_product"."id", "store_product"."name", "store_product"."sku", "store_product"."category",
- "store_product"."price", "store_product"."stock", "store_product"."location", "store_product"."is_available"
- FROM "store_product" LIMIT 21;
Mengubah Data
Selain menambahkan data, Anda juga dapat mengubah data yang sudah disimpan di Database. Terdapat dua pendekatan, mengubah data banyak sekaligus atau hanya satu data.
Untuk mengubah hanya satu data, Anda dapat menggunakan pendekatan seperti berikut.
- from store.models import Product
- product = Product.objects.get(pk=1) # mengambil produk
- product.stock = 120 # mengubah nilai stock
- product.save() # menyimpan perubahan ke database
Hal pertama yang dilakukan adalah mendapatkan data menggunakan get, kemudian mengubah nilainya dan terakhir menyimpan data menggunakan method save().
Di balik layar, kode tersebut akan menghasilkan SQL seperti berikut.
- SELECT "store_product"."id", "store_product"."name", "store_product"."sku", "store_product"."category", "store_product"."price", "store_product"."stock", "store_product"."location", "store_product"."is_available" FROM "store_product" WHERE "store_product"."id" = 1 LIMIT 21;
- UPDATE "store_product" SET "name" = \'Baju\', "sku" = \'SK01\', "category" = \'Fashion\', "price" = 100000.00, "stock" = 120, "location" = \'Jakarta\', "is_available" = true WHERE "store_product"."id" = 1;
Di samping itu, untuk mengubah data dengan jumlah yang banyak sekaligus, Anda dapat memanfaatkan API dari QuerySet yaitu filter(). Perhatikan contoh berikut.
- from store.models import Product
- product = Product.objects.filter(location="Jakarta").update(stock=120)
Semua produk yang berlokasi di Jakarta akan terupdate stoknya menjadi 120.
Untuk bacaan lebih lanjut mengenai QuerySet, Anda dapat membacanya di Dokumentasi QuerySet.
Menghapus Data
Terakhir, menghapus data. Untuk menghapus data dari database, Anda dapat menggunakan method delete(). Method delete akan mengembalikan jumlah baris yang berhasil dihapus. Perhatikan contoh berikut.
- from store.models import Product
- product = Product.objects.get(pk=1)
- product.delete()
Operasi delete tersebut akan menghasilkan SQL berikut.
- SELECT "store_product"."id", "store_product"."name", "store_product"."sku", "store_product"."category", "store_product"."price", "store_product"."stock", "store_product"."location", "store_product"."is_available" FROM "store_product" WHERE "store_product"."id" = 1 LIMIT 21;
- DELETE FROM "store_product" WHERE "store_product"."id" IN (1);
Atau, jika Anda ingin menghapus banyak data sekaligus dapat menggunakan cara seperti berikut.
- from store.models import Product
- product = Product.objects.filter(category="Fashion").delete()
Pada contoh di atas, semua produk dengan kategori Fashion akan terhapus. Harap berhati-hati saat menggunakan cara ini karena data yang sudah terhapus tidak dapat dikembalikan.
Anda dapat mencoba menjalankan contoh kode di materi ini di django-admin shell.
Sudah siap untuk praktik langsung dengan database? Jika iya, ayo kita ayunkan tangan untuk memencet tombol next di sebelah kanan.
Latihan: Membuat dan Menjalankan Migrations
Anda sudah mengetahui pengertian dari migrations. Lalu, bagaimana cara untuk membuatnya? Sebelum itu, kita coba lihat terlebih dahulu perintah migrations apa saja yang ada di manage.py.
- migrate: Perintah untuk menerapkan dan membatalkan migrations.
- makemigrations: Perintah untuk membuat migrations baru berdasarkan perubahan yang terjadi di model.
- sqlmigrate: Perintah untuk menampilkan statement SQL dari migrations.
- showmigrations: Perintah untuk menampilkan daftar dan status migrations.
Anda mungkin sudah menebak, migrations diterapkan menggunakan perintah migrate. Yup, tebakan Anda benar. Ikuti langkah-langkah berikut ini untuk menerapkannya.
- Buka Terminal Anda.
- Sebelum kita menjalankan migrate, alangkah lebih baiknya kita melihat daftar migrations dan statusnya. Jalankan perintah berikut.
- python manage.py showmigrations
- Setelah itu, Anda akan melihat tampilan seperti berikut.

Di gambar tersebut, terlihat daftar migrations yang ada saat ini. Tanda X artinya adalah migrations sudah diterapkan. Di gambar tersebut juga terlihat bahwa migrations yang ada di Django app first_app belum diterapkan.
- Untuk menerapkan migrations tersebut, jalankan perintah berikut ini.
- python manage.py migrate
- Jika berhasil, Anda akan melihat hasil migrate-nya seperti berikut.

Loh, kok sudah berhasil menerapkan migrations-nya? Padahal, kan, kita belum membuat migrations dengan perintah makemigrations. Kenapa hal ini terjadi? Hal ini memungkinkan terjadi karena secara default Django sudah membuatkan migrations untuk table user, permissions dan sebagainya (Anda dapat melihatnya pada gambar di atas). - Kemudian, jalankan kembali server development-nya dengan perintah python manage.py runserver.
- Anda tidak akan melihat lagi pesan peringatan yang sebelumnya muncul karena belum menerapkan migrations.

- Selanjutnya, kita akan membuat migrations baru. Misalnya, ingin membuat tabel kucing dengan kolom name, color, dan type. Untuk membuat tabel, kita membutuhkan sebuah model. Misalnya, model Cat. Untuk membuatnya, Anda harus mengubah berkas models.py. Buka berkas models.py yang ada di Django app “first_app”.
- Setelah itu, tambahkan kode berikut ini setelah baris kode import dependencies.Kode di atas digunakan untuk membuat model Cat dengan atribut datanya yaitu name, color, dan type.
- from django.db import models
- # Create your models here.
- class Cat(models.Model):
- name = models.CharField(max_length=200)
- color = models.CharField(max_length=50)
- type = models.CharField(max_length=200)
- Kemudian, jalankan perintah makemigrations berikut.
- python manage.py makemigrations
- Jika berhasil, Anda akan melihat satu berkas baru yang dihasilkan oleh perintah makemigrations. Berkas tersebut adalah berkas migrations. Berkas migrations tersebut tidak lazim diubah karena ia hasil generate dari model yang kita definisikan sebelumnya.
- Setelah itu, jalankan perintah migrate.
- python manage.py migrate
- Anda akan melihat tampilan seperti berikut.
Migrations yang kita buat telah berhasil diterapkan. - Untuk memastikan hal tersebut, kita dapat mengujinya dengan melakukan eksplorasi database di shell. Jalankan perintah “python manage.py shell” untuk masuk ke dalam shell.
- Kemudian, import model Cat dengan menuliskan kode berikut.
- from first_app.models import Cat
- Selanjutnya, dapatkan seluruh data yang ada di database menggunakan Django ORM. Tulis kode berikut.Kode di atas akan mengembalikan semua objek dari tabel cat.
- Cat.objects.all()
- Jika berhasil, Anda akan melihat tampilan seperti berikut.

Hasil dari Cat.objects.all() adalah queryset. Queryset adalah kumpulan objek di Database. Pada contoh di atas, queryset bernilai kosong karena kita belum menambahkan datanya.
- Saat ini, kita sudah berhasil membuat model dan menjalankan migrations. Selain itu, kita juga sudah berhasil mencoba untuk berinteraksi dengan database dan mendapatkan data dari database.
Selamat! Anda sudah berhasil membuat migrations dan menjalankannya. Kini, Anda sudah memiliki bekal untuk membuat aplikasi Back-End yang membutuhkan database. Jangan berpuas dulu karena kita masih ada materi selanjutnya yang lebih menarik!
Catatan:
Untuk melihat migrations dan database schema selain menggunakan shell, Anda dapat melakukannya dengan memanfaatkan plugin yang ada di PyCharm.
Selain itu, kita juga dapat memastikan hal tersebut dengan melihat database schema melalui database viewer yang dapat dipasang sebagai plugin di PyCharm.
- Saat ini, terdapat banyak database viewer yang gratis, tetapi di kelas ini kita akan menggunakan “Database Navigator". Anda dapat mencari plugin “Database Navigator” dan memasangnya dengan cara mengunjungi halaman tutorial memasang plugin. Database Navigator dapat dipasang di PyCharm versi 242 ke bawah. Setelah berhasil memasangnya, Anda akan melihat Database Navigator pada tab Installed yang ada di Settings Plugins.

- Setelah itu, klik icon tambah.

- Selanjutnya, kita akan menambahkan koneksi ke database. Pilih SQLite.

- Akan tampak pop up seperti berikut.

- Anda dapat menuliskan nama koneksi tersebut seperti berikut.

- Kemudian, pilih berkas database yang dihasilkan oleh migrate sebelumnya dengan cara klik titik tiga yang ada di bagian Connection.

- Akan muncul pop up untuk memilih path dari berkas SQLite seperti berikut.

- Selanjutnya, klik OK.
- Setelah itu, klik Test Connection.

- Pastikan koneksi tersebut berhasil.

- Kemudian, klik Apply dan OK.
- Anda akan melihat koneksi yang ditambahkan sudah berhasil tampil di DB Browser.

- Klik Schemas -> Main -> Tables sehingga tampil tabel seperti berikut.

Anda dapat melihat bahwa kita sudah berhasil membuat tabel baru melalui migrations. Selain itu, kita juga sudah memiliki tabel user yang dibuat oleh Django secara bawaan. Keren, kan?
Bersambung ke:
RESTful API dengan Django dan REST Framework
- Get link
- X
- Other Apps

Comments
Post a Comment