Membuat Aplikasi Django Dan PostgreSQL Dengan Menggunakan Docker Cara 1
Sekarang dengan sedikit perbedaan akan membuat aplikasi Django dan PostgreSQL di Windows.
Langkah yang dilakukan adalah dengan membuat virtual environment terlebih dahulu kemudian baru membuat kontainer dengan Docker. Hal ini dilakukan untuk lebih memahami persamaan dan perbedaan DOcker dengan virtual environment yang biasa dilakukan dalam pengembangan aplikasi Django.
Membuat Virtual Environment
- Buka command prompt dan buat direktori kerja
- Masuk ke folder direktori kerja
- Buat virtual environment, misal dengan nama venv
- Aktifkan virtual environment
- Setelah virtual environment active dengan ditandai di promt (venv)... Install Djanggo versi terakhir 4,
- Install psycopg2-binary
- Buat project Django, misal dengan nama django_project
- Lakukan migrate
- Jalankan server
- Cek di browser dengan alamat http:127.0.0.1:8000, jika berhasil menampilkan halama aplikasi Djanggo maka langkah yang dilakukan berhasil.
- Buat file requirements.txt yang berisi paket yang dibutuhkan dari aplikasi Django yang sudah dibuat
- Selanjutnya akan membuat kontainer dengan docker, maka matikan virtual environment.
Membuat Docker
- Buat file Dockerfile, masukan kode:
- Masukan kode kedalam dile Dockerfile:
- Sebelum membangun image, buat file .dockerignore
- Masukan kode:
- Membangun docker,
- Membuat file docker-compose.yml
- Masukan kode, dengan catatan buat dulu database di PostgreSQL dan tentukan user dan password untuk akses ke database:
- Lakukan konfigurasi untuk seting database di file docker_project/settings.py
- Masukin kode skrip di bagian DATABASES:
- Menjalankan Docker
- Setelah proses selesai, silahkan cek server di browser dengan memasukan alamat http://127.0.0.1:8000. Jika berhasil menampilkan tampilan halaman aplikasi Django maka langkah-langkah yang dilakukan berhasil.
- Atau dengan cara lain dapat dilakukan dengan mengabung perintah build dan docker-compose up dengan cara:
- Setelah dicek server berlajan, untuk keluar dari tampilan service docker dengan cara tekan Ctrl + C
- Selanjutnya akan membuat aplikasi dengan nama accounts, untuk membuat aplikasi untuk pengguna.
Membuat Apps aaccounts
- Membuat App dengan nama accounts
docker-compose run web python manage.py startapp accounts
atau
docker-compose exec web python manage.py startapp accounts- Membuat CustomUser dengan menggunakan AbstractUser, edit file #accounts/models.py
from django.db import modelsfrom django.contrib.auth.models import AbstractUser
# Create your models here.class CustomUser(AbstractUser): pass
- Tambahkan App accounts di bagian INSTALLED_APPS pada file #django_project/settings.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #local 'accounts.apps.AccountsConfig', #tambahkan]- Tambahkan juga di bagian bawah file #django_project/settings.py
AUTH_USER_MODEL = 'accounts.CustomUser'
- Lakukan makemigrations
docker-compose exec web python manage.py makemigrations accounts
output:
accounts/migrations/0001_initial.py
- Create model CustomUser
- Lakukan migrate
docker-compose exec web python manage.py migrate
output:
Operations to perform: Apply all migrations: accounts, admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0001_initial... 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 accounts.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 sessions.0001_initial... OK- Edit file #accounts/forms.py:
#accounts/forms.pyfrom django.contrib.auth import get_user_modelfrom django.contrib.auth.forms import UserCreationForm, UserChangeForm
class CustomUserCreationForm(UserCreationForm): class Meta: model = get_user_model() fields = ("email", "username",)
class CustomUserChangeForm(UserChangeForm): class Meta: model = get_user_model() fields = ("email", "username",)
- Edit file #accounts/admin.py
#accounts/admin.pyfrom django.contrib import adminfrom django.contrib.auth import get_user_modelfrom django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm
# Register your models here.CustomUser = get_user_model()
class CustomUserAdmin(UserAdmin): add_form = CustomUserCreationForm form = CustomUserChangeForm model = CustomUser
list_display = [ "email", "username", "is_superuser", ]
admin.site.register(CustomUser, CustomUserAdmin)- Buat superuser untuk admin, misal dengan username: postgresqladmin, email: postgresqladmin@email.com, dan password: testpass123.
docker-compose exec web python manage.py createsuperuser
- Lalu coba di browser alamat admin http://127.0.0.1:8000/admin, login dengan user yang tadi dibuat.
- Silahkan klik di menu ACCOUNTS/Users, dengan menu tersebut bisa melihat, merubah user dengan menampilkan inputan username dan password serta kemudian menambahkan email dan status user. Silahkan dicoba-coba.
Melakukan test Aplikasi
Setelah dibuat fungsional baru pada aplikasi accounts, selanjutnya dilakukan testing dengan menggunakna unit testing dari framework Django. Testing dilakukan karena meupakan hal penting yang harus dilakukan seperti yang disampaikan oleh pendiri Django yaitu Jacob Kaplan-Moss bahwa "Kode program tanpa dilakukan test adalah sebuah kerusakan dalam desain". Dalam Django terdapat dua tipe test yaitu:
- Unit test kecil, cepat, dan terisolasi untuk sebagian fungsi dalam aplikasi.
- Test yang terintegrasi dimana besar, lambat, dan unit test dilakukan pada keseluruhan aplikasi.
Dalam contoh ini dilakukan unit test sekala kecil pada bagian fungsi yang baru dibuat. Langkah yang dilakukan adalah:
- Edit file #accounts/test.py
- Dan masukan kode di file #accounts/test.py:
- Lakukan test
- Jika berhasil maka akan menghasilkan output:
output:
Membuat Homepage Aplikasi
- Buat aplikasi pages
- Tambahkan pages di file #django_project/settings.py
- Tentukan BASE Directory dan templates di file #django_project/settings.py
- Buat folder templates di Direktory kerja dengan nama templates
- Buat file html di folder templates dengan nama _base.html dan home.html
- File _base.html cara penulisan didepan kata base ada underscore ini hanya merupakan kebiasaan yang menunjukan bahwa file ini akan digunakan/extends untuk file html di seluruh aplikasi (diwariskan). Buat kerangka standar file html untuk file #templates/_base.html
- Masukan kode program pada file #templates/home.html
- Selanjutnya buat routing alamat web index atau link ke halaman saat pertama kali aplikasi dibuka, tambahkan navigasi ke halaman utama dengan mengedit file #django_project/urls.py
- Buat routing di aplikasi pages, yaitu file #pages/urls.py
- Tambahkan kode:
- Edit tampilan view di file #pages/views.py
- Untuk melihat perubahan karena sudah menambahkan app pages dan routing, matikan docker dan jalankan lagi
- Buka alamat http://127.0.0.1:8000/ maka akan menampilkan tampilan halaman home.html
Membuat Test untuk app pages
Test Untuk Homepages
- Lakukan test dengan menggunakna Django SimpleTest
- Buka file #pages/test.py dan masukan kode:
- Lakukan simpletest, dengan kode:
- jika berhasil maka akan menghasilkan output:
- Dari info diatas dilakukan 4 tes karena terdapat 2 tes sebelumnya untuk Custom User Model. Dan jika menginginkan test hanya untuk untuk aplikasi pages maka perintahnya:
- Dan hasil dari perintah tersebut:
- Dari hasil test diatas tidak melibatkan akses ke database.
Test Untuk Templates
- Untuk test template menggunakan fungsi assertTemplateUsed tambahkan kode di file #pages/tests.py
- Lakukan test, dan jika berhasil akan menghasilkan ouput Found 3 test dan no issues
Test Untuk Html, dll
- Keseluruhan kode test app page di file #pages/tests.py
- Lakukan test:
- Jika berhasil tidak ada error maka akan menghasilkan output
- asda
- asdas
- s