Belajar Django: App
Apa itu app? umumnya app diartikan sebagai satu aplikasi utuh kan? Di django sedikit berbeda, di tulisan sebelumnya kita itu sedang membuat “projek”, di dalam projek misal kita akan membuat satu fitur blog post, maka di dalam “project” itu akan ditambahkan “app” blog. Jadi, di dalam satu “projek” bisa ada banyak “app”. Menariknya, “app” dalam django itu bersifat modular dan mandiri, bisa saja kita mengambil “app” dari “projek” satu dan memindahkan ke “projek” lainnya.
Mohon koreksinya ya jika salah.
“MVC”
Bagi yang sudah punya pengalaman di beberapa framework sepert laravel misalnya tentu tidak asing dengan konsep MVC, konsep yang memisahkan tanggung jawab ke masing-masing layer ( saya nyebutnya layer, saya gak tahu padanan yang enaknya apa ). Sederhananya MVC itu masing-masing memiliki tanggung jawabnya:
Model: Umumnya berfungsi sebagai penyambung dengan data/table di database.
View: Di framework seperti laravel view ini bertanggung jawab dalam urusan antar muka dengan user atau tampilannya, kode-kode html biasanya disimpan di sini.
Controler: Sesuai namanya controller adah tempat kita menyimpan kontrol atau logika aplikasi kita, meyambungkan tampilan (menerima request dari antar muka) lalu mengolahnya ( misal berkomuikasi dengan model) dan mengembalikan respon yang dibutuhkan.
App di django tidak berbeda jauh, hanya saja jika boleh memberi nama sendiri di django bisa disebut MVT
Model: Sama dengan umumnya bertanggung jawab berkomunikasi dengan db.
View: Berbeda dengan pengertian yang tadi view di sini berperan sebagai controller
Template: Di sinilah baru kita berurusan dengan antar muka.
Saya berencana tulisan tentang django ini dibagi dalam dua jenis, menggunakan Django untuk membuat aplikasi REST dan aplikasi web pada umumnya, untuk saat ini saya fokus dulu di yang REST
Membuat APP
Untuk membuat “app” di django kita bisa membuatnya dengan perintah:
python manage.py startapp blog
Perintah di atas saya membuat “app” dengan nama “blog”.
note: semua command line yang saya gunakan berada di root direktori
Di dalam direktori akan muncul seperti berikut:
. ├── blog │ ├── admin.py │ ├── apps.py │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── db.sqlite3 ├── manage.py └── restdjango ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
Mendaftarkan APP
Setelah membuat app kita perlu mendaftarkan app, buka `restdjango/settings.py` lalu tambahkan “app” yang sudah dibuat
INSTALLED_APPS = [ #app 'blog.apps.BlogConfig', #default from django 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Model
Di sini saya akan membuat sebuah fitur blog post sederhana:
- Mempunyai 2 table kategori dan post
- Setiap kategori mempunyai banyak post
- Post memiliki status published true atau false
Mari buat databasenya, pertama buka berkas blog/models.py
:
from django.db import models # Create your models here. class Category(models.Model): title=models.CharField(max_length=200) description=models.TextField() created_at=models.DateTimeField(auto_now_add=True) updated_at=models.DateTimeField(auto_now=True) def __str__(self): return self.title class Post(models.Model): category_id=models.ForeignKey(Category, on_delete=models.CASCADE) title=models.CharField(max_length=200) content=models.TextField() publish=models.BooleanField(default=False) created_at=models.DateTimeField(auto_now_add=True) updated_at=models.DateTimeField(auto_now=True) def __str__(self): return self.title
Di atas di dalam model saya membuat dua skema tabel, pertama tabel `Category` dengan memiliki dua atribut yaitu “title” dan “description”, sedangkan di table `post ` memiliki “title”, “content”,”publis”, dan tentu saja “category_id” untuk menunjukan post ini berada di kategori mana saja.
Membuat Migration
Migration itu yang saya pahami membuat skema query sesuai dengan skema yang tadi dibuat di dalam model, untuk membuat migration cukup lakukan
python manage.py makemigrations blog
Muncul informasi sebagai berikut
Migrations for 'blog': blog/migrations/0001_initial.py - Create model Category - Create model Post
Setelah berkas migration dibuat, selanjutnya adalah menambahkan skema yang sudah kita buat ke dalam database, caranya dengan mengeksekusi perintah berikut:
python manage.py migrate
Muncul informasi
Operations to perform: Apply all migrations: admin, auth, blog, contenttypes, sessions Running migrations: Applying blog.0001_initial... OK
Admin
Agar “app” kita terdaftar di admin dashboard buka berkas `blog/admin.py` dan ubah menjadi seperti berikut:
from django.contrib import admin from .models import Category, Post # Register your models here. admin.site.register(Category) admin.site.register(Post)
Selanjutnya silahkan login ke halaman admin dan “app” yang tadi dibuat sudah terdaftar
Halaman “crud Category”
Halaman Post
Yang menarik adalah, kolom “category” langsung diubah menjadi “select list” karena merupakan relasi dari tabel “category” dan kolom “published” langsung berupa “checkbox”.
Referensi:
https://docs.djangoproject.com/en/2.2/intro/tutorial01/
https://docs.djangoproject.com/en/2.2/ref/models/fields/