Tutorial CRUD dengan Django dan Boostrap 4 #2: Setting, Model Migration dan View


Rizqi Maulana
Backend Developer

Settings Django

Kita akan belajar beberapa bagian pada Settings Django yang biasanya perlu kita atur konfigurasinya pertama kali setelah kita membuat Project dan Application. Berikut beberapa konfigurasi yang akan kita atur.

  • DEBUG : konfigurasi ini digunakan untuk mengaktifkan atau menonaktifkan debugging pada aplikasi kita. Secara default nilainya True (aktif)

    DEBUG = True
    
  • ALLOWED_HOSTS : konfigurasi ini digunakan untuk menambahkan alamat hosts yang dijinkan sebagai alamat host dari aplikasi kita. Kita bisa menambahkan lebih dari satu hosts ke dalam aplikasi kita. Berikut contohnya.

    ALLOWED_HOSTS = [
    	'127.0.0.1', //localhost
        'simplecruddjango.test'
    ]
    
  • INSTALLED_APPS : konfigurasi ini digunakan untuk menambahkan Application yang terinstal pada Project. Jadi setiap Application yang kita buat harus kita tambahkan pada konfigurasi ini. Tidak hanya Application yang kita buat sendiri, tetapi kita juga bisa menambahkan Application third party (Application yang dibuat orang lain) pada Project kita.

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # Aplikasi Todo
        'todo.apps.TodoConfig',
    ]
    
  • DATABASES : konfigurasi ini digunakan untuk mengatur koneksi ke database. kita bisa mengubahnya menyesuaikan dengan database driver yang kita pakai, nama database, username dan password dari database kita. Secara default Django menggunakan database SQLite

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
    
  • TIME_ZONE : konfigurasi untuk megatur zona waktu yang kita gunakan. Default valuenya adalah UTC

    TIME_ZONE = 'Asia/Jakarta'
    

    Untuk mengatur konfigurasi settings django silahkan buka file settings.py yang ada di dalam folder todo-project/app kemudian ubah seperti kode di bawah ini.

    todo-project/app/settings.py

    """
    Django settings for app project.
    
    Generated by 'django-admin startproject' using Django 3.1.6.
    
    For more information on this file, see
    https://docs.djangoproject.com/en/3.1/topics/settings/
    
    For the full list of settings and their values, see
    https://docs.djangoproject.com/en/3.1/ref/settings/
    """
    
    from pathlib import Path
    
    # Build paths inside the project like this: BASE_DIR / 'subdir'.
    BASE_DIR = Path(__file__).resolve().parent.parent
    
    
    # Quick-start development settings - unsuitable for production
    # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
    
    # SECURITY WARNING: keep the secret key used in production secret!
    SECRET_KEY = '-&-qo53&0af0@3edgv5jp6^4s=xfdt2+n^uk7w1a1(&*qa0mc2'
    
    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = True
    
    ALLOWED_HOSTS = [
        '127.0.0.1'
    ]
    
    
    # Application definition
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # Aplikasi Todo
        'todo.apps.TodoConfig',
    ]
    
    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',
    ]
    
    ROOT_URLCONF = 'app.urls'
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    WSGI_APPLICATION = 'app.wsgi.application'
    
    
    # Database
    # https://docs.djangoproject.com/en/3.1/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
    
    
    # Password validation
    # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
    
    AUTH_PASSWORD_VALIDATORS = [
        {
            'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
    
    
    # Internationalization
    # https://docs.djangoproject.com/en/3.1/topics/i18n/
    
    LANGUAGE_CODE = 'en-us'
    
    TIME_ZONE = 'Asia/Jakarta'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    
    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/3.1/howto/static-files/
    
    STATIC_URL = '/static/'
    
    

Menjalankan Project

Untuk menjalankan Project Django. Cukup dengan menjalankan perintah di bawah ini.

./manage.py runserver

Buka alamat url http:/127.0.0.1:8000 dan kamu akan melihat tampilan default dari Django.

Untuk menghentikan Project yang sedang berjalan bisa dengan menekan kombinasi tombol CTRL + C pada keyboard. Secara default Django menggunakan port 8000, tetapi kamu bisa mengubah portnya dengan menambahkan port number setelah perintah runserver. berikut contohnya.

./manage.py runserver 3000

Output:

(env) sakukode@sakukode:~/todo-project$ ./manage.py runserver 3000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
February 08, 2021 - 18:54:23
Django version 3.1.6, using settings 'app.settings'
Starting development server at http://127.0.0.1:3000/
Quit the server with CONTROL-C.

Model dan Migration

Model

Model berkaitan erat dengan database seperti proses membaca atau menulis dari atau ke database. Satu Model biasanya merepresentasikan satu Objek atau mewakili satu tabel pada database. Pada Model kita bisa mendefinisikan nama tabel, field serta tipe datanya dan relasi ke tabel lain.

Oke sekarang kita akan membuat satu Model pada aplikasi Todo yaitu Model Task yang mana akan mewakili tabel tasks yang mempunyai struktur kolom seperti berikut.

Nama Field Tipe Data
id integer (primary key)
title varchar/string (100)
description text
status enum (todo, inprogress, closed)
created_at datetime
updated_at datetime

Buka file models.py di dalam folder todo-project/todo/models.py. Ubah seperti kode di bawah ini kemudian simpan kembali.

todo-project/todo/models.py

from django.utils.translation import gettext_lazy as _
from django.db import models


class Task(models.Model):
    # define status choices/options
    class TaskStatus(models.TextChoices):
        TODO = 'todo', _('Todo')
        IN_PROGRESS = 'in_progress', _('In Progress')
        CLOSED = 'closed', _('Closed')
    
    # define columns
    title = models.CharField(max_length=100)
    description = models.TextField()
    status = models.CharField(
        max_length=20,
        choices=TaskStatus.choices,
        default=TaskStatus.TODO
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        # define table name
        db_table = 'tasks'

Migration

Sama halnya dengan kebanyakan Framework yang ada sekarang ini, Django juga mempunyai fitur Migration. Fitur ini sangat berguna bagi developer untuk menambahkan tabel, menambah, mengubah atau menghapus kolom secara otomatis tanpa perlu membuatnya secara manual. Migration pada Django akan mendeteksi ketika kita membuat sebuah Model baru atau mengubah Model yang ada. Dan untuk menggenerate file Migration gunakan perintah di bawah ini.

./manage.py makemigrations todo

Jika berhasil akan tergenerate sebuah file baru (todo-project/todo/migrations/0001_initial.py). Selanjutnya kita perlu menjalankan Migration tetapi sebelum itu pastikan kalau konfigurasi koneksi database di file settings.py sudah benar. Pada tutorial ini kita menggunakan SQLite sebagai default database jadi kita tidak perlu mengubah apapun konfigurasi DATABASE pada file settings.py. Ketikkan perintah di bawah ini untuk menjalankan Migration.

./manage.py migrate

Output:

(env) sakukode@sakukode:~/todo-project$ ./manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, todo
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
  Applying todo.0001_initial... OK
(env) sakukode@sakukode:~/todo-project$ 

View

View bertugas memroses http request yang datang dan mengembalikan responsenya ke dalam suatu format (json, xml, html). Pertama kita akan belajar membuat View sederhana terlebih dahulu sebelum membuat View untuk aplikasi CRUD Todo kita. Kita akan membuat View pertama yang hanya akan menampilkan teks "Belajar CRUD Django". Buka file todo-project/todo/views.py dan ubah dengan kode seperti di bawah ini.

todo-project/todo/views

from django.shortcuts import render
from django.http import HttpResponse

def my_view(request):
    return HttpResponse("Belajar CRUD Django")

Pada kode di atas kita menambahkan kode untuk mengimport class HttpResponse yang digunakan untuk membuat http response. Kita juga membuat satu function my_view yang di dalam function tersebut kita mengembalikan http response yang berisi teks "Belajar CRUD Django". Apakah aplikasi kita sudah bisa menampilkan View yang kita buat di atas?belum. Kita butuh satu step lagi yaitu membuat sebuah route di dalam Django URLs.

URL

Kita perlu menambahkan route pada Django Urls dan mengarahkannya ke View yang sudah kita buat. Silahkan buat file baru dengan urls.py di dalam folder todo-project/todo. Buka file tersebut kemudian tambahkan kode berikut dan simpan.

todo-project/todo/urls.py

from django.urls import path

# import my_view from todo Application
from .views import my_view

urlpatterns = [
    path('', my_view, name='my_view')
]

Selanjutnya buka file todo-projects/app/urls.py dan ubah kode nya seperti di bawah ini.

"""app URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.urls.conf import include

urlpatterns = [
    path('admin/', admin.site.urls),
    # add route from todo Application
    path('todo/', include('todo.urls'))
]

Pada kode di atas kita menambahkan route dari todo Application. yang artinya setiap route yang kita tambahkan pada todo Application (todo-project/todo/urls.py) akan secara otomatis ditambahkan juga pada URL Project Django kita. Sekarang coba jalankan kembalikan aplikasi Django kita kemudian buka kembali url http://127.0.0.1:8000/todo. Dan tampilan awal aplikasi kita akan berubah dengan menampilkan teks "Belajar CRUD Django".


INFO : Ebook Python & Django


Rizqi Maulana
Backend Developer
KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

KOMENTAR