Sunday, November 5, 2023

Download Ebook Practical Statistics for Data Scientists

Download Ebook Practical Statistics for Data Scientists



In the rapidly evolving landscape of data science, the significance of statistics cannot be overstated. With the exponential growth of data, the role of statistics has become increasingly crucial in extracting meaningful insights. Data scientists rely on practical statistics to decipher complex patterns and trends, facilitating informed decision-making processes and predictive modeling. Understanding the foundations of statistics is paramount for any data scientist aiming to derive valuable information from vast datasets.


Link download disini

Monday, October 30, 2023

Monday, August 21, 2023

Google Earth Engine untuk Menampilkan SRTM dan Slope

Google Earth Engine untuk Menampilkan SRTM dan Slope


Dengan menggunakan Google Earth Engine kita dengan mudah untuk menampilkan data SRTM dan dari SRTM tersebut bisa menampilkan data Slope.

Oke langkah yang dilakukan adalah:

  • Definisikan citra yang akan ditampilkan, dalam hal ini SRTM 30 meter

//menampilkan citra srtm 30 m
var srtmIndramayu = ee.Image('USGS/SRTMGL1_003');

  • Definisikan variabel slope dari srtm 30 meter yang sudah didefinisikan

//membuat tampilan slope
var slope = ee.Terrain.slope(srtmIndramayu);

  • Memotong tampilan/clip dengan daerah yang diinginkan, misal dalam hal ini saya sebelumnya import data di asset untuk batas Kabupaten Indramayu

var clipSRTM = srtmIndramayu.clip(table);
var clipSlope= slope.clip(table);

  • Sesuaikan tampilan tengah dari peta yang akan ditampilkan dan skalanya

Map.setCenter(108.04636604969731, -6.531038850703211, 10);

  • Definisikan parameter untuk tampilan peta termasuk palette warna, dan nilai min dan max

var imageVisParam1 = {
'min': -2,
'max': 3128,
'opacity': 1,
'palette': ['3916ff', '10bdff', '10fff4', '14ff87', 'baff12', 'fbff12', 'ffc114', 'ff4218'],
};

  •  Tampilkan peta srtm dan slope

Map.addLayer(clipSRTM, imageVisParam1,'SRTM 30');

Map.addLayer(clipSlope, {}, 'Slope');

  • Kode keseluruhan

//menampilkan citra srtm 30 m
var srtmIndramayu = ee.Image('USGS/SRTMGL1_003');
//slope                                     
var slope = ee.Terrain.slope(srtmIndramayu);
                                            
var clipSRTM = srtmIndramayu.clip(table);   
                                            
var clipSlope= slope.clip(table);           
                                            
var imageVisParam1 = {                      
   'min': -2,                               
   'max': 3128,                             
   'opacity': 1,                            
   'palette': ['3916ff', '10bdff', '10fff4',
       '14ff87', 'baff12', 'fbff12',        
       'ffc114', 'ff4218'],                 
  };                                        
                                            
Map.setCenter(108.04636604969731, -6.531038850703211, 10);
Map.addLayer(clipSRTM, imageVisParam1,'SRTM 30');
Map.addLayer(clipSlope, {}, 'Slope');


Terima kasih semoga bermanfaat. @wawanhn



Thursday, August 17, 2023

Mengenal Google Earth Engine

Mengenal Google Earth Engine

 

Google Earth Engine: Platform Analisis Geospasial berbasis Cloud 

Google Earth Engine adalah inovasi terkini dalam analisis data geospasial yang memberikan akses tak terbatas kepada peneliti, ilmuwan atau penguna lain untuk menjelajahi dan menganalisis fenomena bumi dalam skala global. Dengan memadukan kumpulan data citra satelit dan teknologi komputasi awan yang canggih, platform ini memberikan fasilitas untuk melakukan analisis mendalam tentang perubahan lingkungan, dinamika lahan, pemantauan iklim, keanekaragaman hayati, serta aspek topografi.

Melalui Google Earth Engine, praktisi dan akademisi memiliki akses terhadap beragam sumber data geospasial yang meliputi perekaman citra satelit dari berbagai sumber seperti Landsat, Sentinel, dan MODIS, Chirps. Dengan perangkat lunak ini, para pengguna mampu menjalankan berbagai analisis, mulai dari pemetaan perubahan spasial seiring waktu, hingga pemodelan dinamika lingkungan.

Keunggulan utama Google Earth Engine terletak pada kemampuannya untuk memproses data dalam skala global dengan kecepatan tinggi, mengeliminasi kebutuhan akan infrastruktur komputasi yang mahal. Ini menjadi alat yang sangat berharga bagi studi ilmiah dalam berbagai bidang, seperti geografi, ekologi, pengelolaan sumber daya alam, dan ilmu sosial.

Dalam konteks akademis, Google Earth Engine telah membuka jendela baru untuk penelitian yang lebih dalam dan luas. Pengguna dapat melakukan analisis spasial yang kompleks, membuat pemodelan prediktif yang tepat waktu, serta menghasilkan visualisasi yang informatif. Hal ini memfasilitasi proses pengambilan keputusan yang lebih baik berdasarkan informasi geospasial yang kaya dan mendalam.

Dalam kesimpulannya, Google Earth Engine telah memberikan sumbangan penting bagi dunia akademis dan riset ilmiah. Dengan membuka akses ke data geospasial global dan alat analisis berkecepatan tinggi, platform ini telah mendorong eksplorasi mendalam tentang dinamika planet kita, serta memberikan dasar bagi penelitian lanjutan dalam berbagai disiplin ilmu.


Monday, July 24, 2023

Download Buku Panduan Siswa untuk Pelajaran IPA Kelas XI Kurukulum Merdeka Terbaru

Download Buku Panduan Siswa untuk Pelajaran IPA Kelas XI Kurukulum Merdeka Terbaru

Saat ini kurikulum merdeka di tinkat Sekolah Menengah Atas sudah mulai semarak dilakukan di berbagai sekolah, bukan hanya sekolah penggerak atau perintis. Dengan kurikulum merdeka siswa diharapkan mampu belajar mandiri dan berkreasi supaya menjadi lebih maju, kreatif dan bisa berbagi.

Bagi siswa yang memerlukan buku untuk bahan pembelajaran Kurikulum Merdeka bidang IPA kelas XI, saya bagikan link buku dalam bentuk digital sebagai berikut:

Terima kasih sudah berkunjung semoga mendapatkan manfaat dan semakin sukses. @wawanhn

Referensi: https://www.defantri.com/2023/06/buku-kurikulum-merdeka-sma-11.html


Download Buku Panduan Guru untuk Pelajaran IPA Kelas XI Kurukulum Merdeka Terbaru

Download Buku Panduan Guru untuk Pelajaran IPA Kelas XI Kurukulum Merdeka Terbaru


Saat ini kurikulum merdeka di tinkat Sekolah Menengah Atas sudah mulai semarak dilakukan di berbagai sekolah, bukan hanya sekolah penggerak atau perintis. Dengan kurikulum merdeka siswa diharapkan mampu belajar mandiri dan berkreasi supaya menjadi lebih maju, kreatif dan bisa berbagi.

Bagi guru yang memerlukan buku untuk bahan pembelajaran Kurikulum Merdeka bidang IPA kelas XI, saya bagikan link buku dalam bentuk digital sebagai berikut:

Terima kasih sudah berkunjung semoga mendapatkan manfaat dan semakin sukses. @wawanhn

Referensi: https://www.defantri.com/2023/06/buku-kurikulum-merdeka-sma-11.html


Saturday, July 8, 2023

Install PostgreSQL 14 di Linux berbasis Ubuntu

Install PostgreSQL 14 di Linux berbasis Ubuntu

 

Step 1 – Install PostgreSQL 14 on Debian 11 | Debian 10

PostgreSQL is available in the default Debian repositories but the available versions are not up to date. Check the available versions using the command:

sudo apt-cache search postgresql | grep postgresql

In this guide, we are interested in PostgreSQL 14 which is not provided in the default repositories. Therefore, we are required to add a repository that provides the package.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Import the GPG key for the added repository.

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Next, update your APT package index.

sudo apt -y update

Tulisan ini saya copy dari sumber website: https://computingforgeeks.com/how-to-install-postgresql-14-on-debian/

Langkah yang dilakukan adalah sebagai berikut:

Now install PostgreSQL 14 on Debian 11/Debian 10 using the command below.

sudo apt install postgresql-14

Verify your PostgreSQL 14 installation as below.

$ sudo -u postgres psql -c "SELECT version();"
                                                           version                                                           
-----------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.8 (Debian 14.8-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

With a complete installation, PostgreSQL 14 will be initialized. Check the status of the service as below. 

$ systemctl status postgresql    

Referensi:

https://computingforgeeks.com/best-books-to-learn-postgresql-database/

https://computingforgeeks.com/how-to-install-postgis-on-ubuntu-linux/

https://zonabiner.com/install-postgresql-ubuntu-20-04

https://askubuntu.com/questions/1010442/how-to-uninstall-the-postgresql


Friday, February 17, 2023

Mengambil teks tertentu dari field di QGIS


Saat bekerja dengan string di atribut tabel QGIS dan ingin mengambil teks tertentu dalam suatu kolom atau field di atibut QGIS kita bisa memanfaatkan banyak fungsi string salah satunya substr.

Sebagai contoh saya ingin melakukan join antara file excel/csv tentang data desa dengan menggunakan kode des BPS 1608010001 dengan 10 digit kode. Dan saya mendapatkan file shp untuk batas desa dari BIG dimana terdapat field dengan atribut 16.08.01.0001. Maka untuk melakukan join saya harus merubah kode kolom dari BIG menjadi seperti kode BPS.

Langkah yang di lakukan dengan menggunakan Open Field Calculator masukan kode

substr("field_BIG", 0,2) + substr("field_BIG", 4,2) + substr("field_BIG", 7,2) + substr("field_BIG", 10,4)

Terima kasih sudah menyimak, smeoga bermanfaat. @wawanhn 

Tuesday, October 18, 2022

Mengkoneksikan PostgreSQL di Droplet Digital Ocean dengan PgAdmin


Digital Ocean


  1. Buat Droplet
  1. Koneksi ke Droplet
sudo apt update

apt install postgresql postgresql-contrib

update-rc.d postgresql enable

service postgresql start

service postgresql status


Output:
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2022-10-18 10:09:53 UTC; 2min 7s ago
   Main PID: 4320 (code=exited, status=0/SUCCESS)
        CPU: 1ms

cd ../etc/postgresql

ls

cd 14/main/

ls

Output: 
conf.d  environment  pg_ctl.conf  pg_hba.conf  pg_ident.conf  postgresql.conf  start.conf

ls -la

Output:
drwxr-xr-x 3 postgres postgres  4096 Oct 18 10:09 .
drwxr-xr-x 3 postgres postgres  4096 Oct 18 10:09 ..
drwxr-xr-x 2 postgres postgres  4096 Oct 18 10:09 conf.d
-rw-r--r-- 1 postgres postgres   315 Oct 18 10:09 environment
-rw-r--r-- 1 postgres postgres   143 Oct 18 10:09 pg_ctl.conf
-rw-r----- 1 postgres postgres  5002 Oct 18 10:09 pg_hba.conf
-rw-r----- 1 postgres postgres  1636 Oct 18 10:09 pg_ident.conf
-rw-r--r-- 1 postgres postgres 29032 Oct 18 10:09 postgresql.conf
-rw-r--r-- 1 postgres postgres   317 Oct 18 10:09 start.conf

sudo nano pg_hba.conf

Kemudian masukan pada baris paling akhir:

host    all    all    0.0.0.0/0    trust
host    all    all    ::/0   trust

sudo nano postgresql.conf

Edit baris ini, hilangkan komentar:

listen_addresses = '*'          # what IP address(es) to listen on;

service postgresql restart

Koneksi dengan PgAdmin4

  1. Buka PgAdmin4, lalu di bagian menu kiri klik kanan Create Server
  2. Pada Tab General masukan nama koneksi
  3. Pada Tab Connection, masukan Host dengan IP dari Droplet DigitalOcean
  4. Kemudian masukan port 5432, maintenance database postgres, dan Username postgres lalu klik Save.
  5. Maka berhasil koneksi ke database PostgreSQL di Droplet DigitalOcean.
Silahkan buat database dan mebuat tabel.

Install extensi postgis

sudo apt install postgis postgresql-14-postgis-3

Misal buat database dan user

sudo -i -u postgres

lalu masuk ke postgrsql

createuser user123

createdb db_xxx -O user123

psql -d db_xxx

Menambahkan/menggati password untuk user1

ALTER USER user123 WITH PASSWORD password_baru

CREATE EXTENSION postgis;

Melihat List Database

\l

Pindah database

\c <nama_database>

List Table

\dt

Membuka port untuk Postgresql

sudo ufw allow <port>

Restart PostgreSQL

service postgresql restart



Referensi:
https://computingforgeeks.com/how-to-install-postgis-on-ubuntu-linux/

https://docs.digitalocean.com/products/databases/postgresql/how-to/connect/

https://www.bigbinary.com/blog/configure-postgresql-to-allow-remote-connection

https://chartio.com/resources/tutorials/how-to-list-databases-and-tables-in-postgresql-using-psql/

Tuesday, October 11, 2022

Cara Embeding Gambar di Google Drive dengan Tag HTML

Cara Embeding Gambar di Google Drive dengan Tag HTML

Dalam membuat website atau blog salah satu cara untuk membuat tampilan lebih menarik dan lebih memberikan informasi yang jelas adalah dengan menampilkan gambar. Dengan pertimbangan keamanan dan efisiensi ukuran penyimpan untuk gambar bisa menggunakan layanan cloud. Dalam hal ini salah satunya menggunakan Google Drive sebaga penyedia cloud untuk penyimpanan data. Misal kita simpan gambar-gambar untuk blog atau web kita kemudian kita link kan gambar tersebut dengan memanggil menggunakan tag html img.

Jika langsung dengan melinkan alamat gambar dari Google Drive maka gambar tersebut tidak akan langsung tampil. Sehingga untuk bisa menampilkan gambar tersebut perlu dilakukan langkah-langkah yaitu:

  • Buka Google Drive,

  • Upload gambar,

  • Klik kanan pada gambar pilih share atau bagikan,

  • Setelah tampil, rubah seting Akses Umum menjadi Siapa saja yang memiliki link,


  • Salin Link, misal kita dapat link: https://drive.google.com/file/d/1huTfLaQQVrusrwK-US_T1VRFW10pHJ4G/view

  • Masukan kode ke tag img dengan menambahkan kode https://drive.google.com/uc?export=view&id=[id_image]

  • Dan ganti [id_image] dengan id image di Google drive dalam hal ini 1huTfLaQQVrusrwK-US_T1VRFW10pHJ4G
<img src="https://drive.google.com/uc?export=view&id="1huTfLaQQVrusrwK-US_T1VRFW10pHJ4G">
  • Dan akhirnya kita bisa menampilkan gambar di Google Drive.
Terima kasih sudah menyimak tutorial sederhana namun sangat bermanfaat. @wawanhn

Referensi:
https://stackoverflow.com/questions/15557392/how-do-i-display-images-from-google-drive-on-a-website
https://dev.to/temmietope/embedding-a-google-drive-image-in-html-3mm9

Sunday, October 9, 2022

Membuat Aplikasi Django dan PostgreSQL dengan menggunakan Docker cara 2

Setelah sebelumnya membuat aplikasi Django dan PostgreSQL di 

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
mkdir dockertest
  • Masuk ke folder direktori kerja
cd dockertest
  • Buat virtual environment, misal dengan nama venv
python -m venv venv
  • Aktifkan virtual environment
cd venv/scripts

activate
  • Setelah virtual environment active dengan ditandai di promt (venv)... Install Djanggo versi terakhir 4,
python -m pip install Django~=4.0.0
  • Install psycopg2-binary
python -m pip install psycopg2-binary==2.9.3
  • Buat project Django, misal dengan nama django_project
django-admin startproject django_project .
  • Lakukan migrate
python manage.py migrate
  • Jalankan server
python manage.py runserver
  • 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
pip freeze > requirements.txt
  • Selanjutnya akan membuat kontainer dengan docker, maka matikan virtual environment.
deactivate

Membuat Docker

  • Buat file Dockerfile, masukan kode:
vim Dokerfile

  • Masukan kode kedalam dile Dockerfile:

#Pull base image
FROM python:3.9

#SEt environment variable
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTBYTECODE 1
ENV PYTHONUNBUFFERED 1

#Set work directory
WORKDIR /code

#Install dependecies
COPY ./requirements.txt .
RUN pip install -r requirements.txt

#Copy project
COPY . .
  • Sebelum membangun image, buat file .dockerignore
vim .dockerignore
  • Masukan kode:
.venv
.git
.gitignore
  • Membangun docker,
docker build .
  • Membuat file docker-compose.yml
vim docker-compose.yml
  • Masukan kode, dengan catatan buat dulu database di PostgreSQL dan tentukan user dan password untuk akses ke database:
version: "3.9"

services:
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db    

volumes:
  postgres_data:
  • Lakukan konfigurasi untuk seting database di file docker_project/settings.py
vim docker_project/settings.py
  • Masukin kode skrip di bagian DATABASES:
DATABASES ={
     'default': {
         'ENGINE': 'django.db.backends.postgresql',
         'NAME': 'postgres',
         'USER': 'postgres',
         'PASSWORD': 'password',
         'HOST': 'db',
         'PORT': '5432',
         }
}
  • Menjalankan Docker
docker-compose up
  • 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:
docker-compose up -d --build
  • 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 models
from 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:

Migrations for 'accounts':
  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, sessions
Running 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.py
from django.contrib.auth import get_user_model
from 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.py
from django.contrib import admin
from django.contrib.auth import get_user_model
from 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 
vim accounts/tests.py
  • Dan masukan kode di file #accounts/test.py:
#accounts/test.py
from django.contrib.auth import get_user_model
from django.test import TestCase

class CustomUserTests(TestCase):
    def test_create_user(self):
        User = get_user_model()
        user = User.objects.create_user(username="wawanhn", email="wawanhn@email.com", password="testpass123")

        self.assertEqual(user.username, "wawanhn")
        self.assertEqual(user.email, "wawanhn@email.com")
        self.assertTrue(user.is_active)
        self.assertFalse(user.is_staff)
        self.assertFalse(user.is_superuser)

    def test_create_superuser(self):
        User = get_user_model()
        admin_user = User.objects.create_superuser(username="superadmin", email="superadmin@email.com", password="testpass123")
        self.assertEqual(admin_user.username, "superadmin")
        self.assertEqual(admin_user.email, "superadmin@email.com")
        self.assertTrue(admin_user.is_active)
        self.assertTrue(admin_user.is_staff)
        self.assertTrue(admin_user.is_superuser)
  • Lakukan test
docker-compose exec web python manage.py test
  • Jika berhasil maka akan menghasilkan output:

output:

Found 2 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.494s

OK
Destroying test database for alias 'default'...

Membuat Homepage Aplikasi

  • Buat aplikasi pages
docker-compose exec web python manage.py startapp pages
  • Tambahkan pages di 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',
    'accounts.apps.AccountsConfig',
    'pages.apps.PagesConfig', #tambahan baru
]
  • Tentukan BASE Directory dan templates di file #django_project/settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR/'templates'], #tambahkan di baris ini
        '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',
            ],
        },
    },
]
  • Buat folder templates di Direktory kerja dengan nama templates
mkdir templates
  • Buat file html di folder templates dengan nama _base.html dan home.html
vim templates/_base.html
vim templates/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
<!-- templates/_base.html -->
<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>{% block title %} Toko Buku {% endblock title %}</title>
    </head>
    <body>
        <div class='container'>
            {% block content %}

            {% endblock content %}
        </div>
    </body>
</html>

  • Masukan kode program pada file #templates/home.html
<!-- templates/home.html -->
{% extends '_base.html' %}

{% block title %} Home {% endblock title %}

{% block content %}
  <h1>Tihs is our home page.</h1>
{% endblock content %}

  • 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
from django.contrib import admin
from django.urls import path, include #tambahkan ini

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('pages.urls')), #tambahkan ini
]
  • Buat routing di aplikasi pages, yaitu file #pages/urls.py
vim pages/urls.py
  • Tambahkan kode:
#pages/urls.py
from django.urls import path
from .views import HomePageView

urlpatterns = [
        path('', HomePageView.as_view(), name='home'),
        ]
  • Edit tampilan view di file #pages/views.py
#pages/views.py
from django.shortcuts import render
from django.views.generic import TemplateView

# Create your views here.
class HomePageView(TemplateView):
    template_name = 'home.html'
  • Untuk melihat perubahan karena sudah menambahkan app pages dan routing, matikan docker dan jalankan lagi
docker-compose down

docker compose up -d 

  • 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
vim pages/tests.py
  • Buka file #pages/test.py dan masukan kode:
#pages/tests.py
#from django.test import TestCase
from django.test import SimpleTestCase
from django.urls import reverse

# Create your tests here.
class HomepageTests(SimpleTestCase):
    def test_url_exists_at_correct_location(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

    def test_homepage_url_name(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)
  • Lakukan simpletest, dengan kode:
docker-compose exec web python manage.py test
  • jika berhasil maka akan menghasilkan output:
Found 4 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
....
----------------------------------------------------------------------
Ran 4 tests in 0.554s

OK
Destroying test database for alias 'default'...
  • 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:
docker-compose exec web python manage.py test pages
  • Dan hasil dari perintah tersebut:
Found 2 test(s).
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.025s

OK
  • 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
#pages/tests.py
#from django.test import TestCase
from django.test import SimpleTestCase
from django.urls import reverse

# Create your tests here.
class HomepageTests(SimpleTestCase):
    def test_url_exists_at_correct_location(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

    def test_homepage_url_name(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)

    def test_homepage_template(self): #tambahan baru
        response = self.client.get('/')
        self.assertTemplateUsed(response, 'home.html')
  • Lakukan test, dan jika berhasil akan menghasilkan ouput Found 3 test dan no issues
docker-compose exec web python manage.py test pages

Test Untuk Html, dll

  • Keseluruhan kode test app page di file #pages/tests.py
#pages/tests.py
#from django.test import TestCase
from django.test import SimpleTestCase
from django.urls import reverse, resolve
from .views import HomePageView

# Create your tests here.
class HomepageTests(SimpleTestCase):
    def setUp(self):
        url = reverse('home')
        self.response = self.client.get(url)

    def test_url_exists_at_correct_location(self):
        #response = self.client.get('/')
        self.assertEqual(self.response.status_code, 200)

    def test_homepage_url_name(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)

    def test_homepage_template(self):
        #response = self.client.get('/')
        self.assertTemplateUsed(self.response, 'home.html')

    def test_homepage_contains_correct_html(self):
        #response = self.client.get('/')
        self.assertContains(self.response, 'home page')

    def test_homepage_does_not_contain_incorect_html(self):
        #response = self.client.get('/')
        self.assertNotContains(self.response,'Hi there! Should not be on the page.')

    def test_homepage_url_resolves_homepageview(self):
        view = resolve('/')
        self.assertEqual(view.func.__name__,HomePageView.as_view().__name__)

  • Lakukan test:
docker-compose exec web python manage.py test pages
  • Jika berhasil tidak ada error maka akan menghasilkan output
Found 6 test(s).
System check identified no issues (0 silenced).
......
----------------------------------------------------------------------
Ran 6 tests in 0.037s

OK
  • asda
  • asdas
  • s

Demkian langkah-langkah membuat aplikasi Django dan PostgreSQL dengan menggunakan Docker sederhana, semoga menambah pengetahuan. @wawanhn