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