0
22
0
share
#Tutorial
0 Reactions
22 Komentar
Membangun Aplikasi Mini HRD dengan Django (1): Pengenalan Django Admin
Ridwan Fajar • 2 Juni 2016
Django merupakan salah satu fullstack web framework yang populer di kalangan programmer Python. Keunggulannya terletak pada beragamnya dukungan terhadap berbagai database baik itu relasional maupun non relasional. Secara default, Django mendukung database relasional seperti PostgreSQL, SQLite, MySQL, dan Oracle. Django memiliki segudang fitur built-in yang dapat membantu Anda lebih mudah untuk membangun aplikasi. Beberapa fitur yang menjadi Andalan Django adalah:
- Sistem autentikasi built-in
- Object relational mapper
- Built-in template engine
- Form dan ModelForm
- Administrator page
- Migration tool
- Command-line tool
- dan masih banyak lagi
- Model adalah file yang berisi class untuk menggambarkan sebuah tabel pada database
- Views adalah kumpulan function di dalam suatu modul yang akan memproses request dan memberikan response, sama halnya seperti controller di MVC
- Template adalah file yang berisi HTML dan tidak ada kode Python di dalamnya, sama halnya seperti views di MVC
- Mengelola pengguna sistem
- Mengelola data divisi dan jabatan
- Mengelola data karyawan
- Mengelola data kehadiran
- Membuat halaman untuk karyawan untuk melihat daftar hadir dan pengajuan cuti
Instalasi Django dan Python
Django dapat dipasang di berbagai sistem operasi seperti Windows, Mac OSX, Linux, dan BSD varian. Untuk pengguna Windows Anda dapat menggunakan installer .exe untuk Python, PIP, dan Django. Ingat, Python yang digunakan di tutorial ini adalah versi 2.7.x ke atas. Sedangkan untuk pengguna OSX umumnya tersedia dalam Brew atau installer tersendiri. Anda dapat mencari installer PIP, Python, dan Django untuk OSX. Sedangkan untuk pengguna Linux dan BSD mungkin agak lebih mudah proses instalasinya karena sudah disediakan repositori masing - masing sistem operasi. Berikut adalah cara install Django di Linux dan BSD.Cara install di Ubuntu:
$ sudo apt-get install pip
$ sudo pip install django
Cara install di Fedora:
$ sudo yum install pip
$ sudo pip install django
Install dari source code Django (untuk pengguna BSD atau Linux lainnya):
$ tar -xzvf django-1.9.x.tgz
$ cd django-1.9.x
$ python setup.py install
Bila sudah berhasil memasang Django di sistem operasi Anda, cobalah buka konsol / terminal untuk mencoba Django dengan perintah seperti berikut:
$ django-admin.py --version
1.9.x
Membuat Proyek Baru
Untuk membuat proyek baru di Django cukup mudah. Berbeda dengan beberapa web framework yang bisa digunakan setelah mengunduh source code-nya, installer Django disimpan di sistem operasi untuk kemudian lagi di-update versinya bila diperlukan. Hanya dengan menggunakan django-admin.py di konsol kita dapat membuat sebuah proyek Django baru. Untuk tutorial ini silahkan simpan saja di folder manapun yang Anda sukai, kemudian panggil perintah berikut untuk membuat proyek baru:$ django-admin.py startproject mini_hrd
Sekarang kita coba lihat ada apa sajakah di dalam sebuah proyek Django yang baru lahir:
$ cd mini_hrd/
$ ls mini_hrd
manage.py mini_hrd
$ ls mini_hrd/mini_hrd
__init__.py settings.py urls.py wsgi.py
Di dalam proyek baru Django ada beberapa file yang perlu dikenali:
- manage.py merupakan file yang akan menjadi jembatan untuk menggunakan perintah konsol yang dimiliki Django, ada cukup banyak perintah konsol yang dimiliki Django seperti membuat modul baru, meng-generate database dari ORM ke RDBMS, dan lainnya
- mini_hrd/ _ _ init _ _ .py merupakan sebuah file yang menjadi penanda bagi sebuah direktori di dalam proyek aplikasi agar dikenali Python dan dapat terlibat dalam proses import modul dan file. Cocok sekali bila kita terbiasa membuat sebuah aplikasi terbagi menjadi beberapa file atau modul
- mini_hrd/settings.py merupakan file yang berisi pengaturan Django mulai dari pengaturan database, pengaturan dimana file statik seperti CSS dan Javascript berada, pengaturan aplikasi atau sistem yang terintegrasi dengan aplikasi Django, dan berbagai pengaturan lainnya
- urls.py merupakan file yang berisi pemetaan URL ke views atau modul yang ada di dalam Django, misal ketika kita ingin mengakses http://localhost:8000/about maka kita akan diarahkan ke urls.py kemudian dia akan melihat views mana yang akan memproses request tersebut, misal nama views-nya adalah homepage.views.about
- wsgi.py merupakan file yang akan digunakan ketika akan melakukan proses deploy aplikasi Django di web server seperti Apache atau Nginx
Pada konfigurasi database SQLite3 diatas, kita akan menyimpan file database di folder proyek. Sekarang kita akan melakukan migrasi database untuk pertama kali dan ini hukumnya wajib bila kita ingin menggunakan halaman admin Django:...............
WSGI_APPLICATION = 'mini_hrd.wsgi.application'
Database
https://docs.djangoproject.com/en/1.9/ref/settings/#databases
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
...............
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... 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 sessions.0001_initial... OK
Pada output diatas Anda dapat melihat bahwa Django membuat beberapa tabel yang akan digunakan untuk mengelola user, group, dan keperluan administrasi Django. Sekarang kita akan membuat super user yang akan digunakan untuk mengakses halaman Django Admin. Di dalam percobaan ini Anda dapat memasukkan username yang Anda mau ata membiarkannya dinamai oleh Django kemudian memasukkan sebuah email yaitu "ridwanbejo@gmail.com" dan sebuah password yaitu "ridwanfajar":
$ python manage.py createsuperuser
Username (leave blank to use 'ridwanfajar'):
Email address: ridwanbejo@gmail.com
Password:
Password (again):
Superuser created successfully.
Selamat Anda berhasil membuat sebuah super user untuk aplikasi Django kita, tapi kita harus mencoba menjalankannya di server dan melihatnya di web browser. Beruntunglah bagi pengguna Django karena dia sudah menyediakan sebuah built-in webserver untuk digunakan sebagai proses development. Anda dapat menjalankan Django untuk melihat Django pertama kali dengan perintah runserver:
$ python manage.py runserver
Sekarang cobalah buka web browser Anda dan silahkan akses URL http://localhost:8000/ dan http://localhost:8000/admin/:
Selamat Anda akhirnya berhasil membuat sebuah aplikasi Web Django untuk pertama kali. Sekarang kita coba akses halaman admin dengan menggunakan akun super user yang telah kita buat kemudian setelah berhasil login Anda akan melihat sebuah halaman yang telah berisi dua menu yaitu Groups dan Users:
Sebelum menjelajah ke langkah selanjutnya, sekarang mari kita mengintip terlebih dahulu halaman mengelola users yang ada di Django Admin:
OK, akhirnya poin pertama dari objektif kita di tutorial ini sudah beres. Mari kita bergerak ke quest berikutnya :D.
Membuat Modul Karyawan dan Kehadiran
Di dalam aplikasi Mini HRD ini kita akan membuat modul kehadiran dan karyawan. Modul dapat diartikan sebagai folder yang berisi file - file Django seperti model, views, dan template. Untuk membuat sebuah modul diperlukan perintah startapp dengan melewatkan nama modul yang akan dibuat. Perhatikan perintah dibawah ini:$ python manage.py startapp karyawan
$ python manage.py startapp kehadiran
Kemudian setelah berhasil membuat kedua modul tersebut, kita harus mendaftarkannya di mini_hrd/settings.py agar modul tersebut dapat dilibatkan dalam proses migrasi database dan dapat ditampilkan di halaman admin Django:
Mari kita lanjut ke tahap berikutnya, kita akan membuat empat class model di dalam karyawan/models.py. Class tersebut terdiri dari Divisi, Jabatan, Karyawan, dan Akun. Di dalam sebuah file model wajib terdapat sintaks from django.db import models yang artinya kita memanggil modul models yang tersedia di Django. Setiap class model akan diturunkan dari sebuah class models.Model. Di dalamnya akan terdapat pendefinisian field tabel dan berbagai function yang akan dimiliki class tersebut. Sekarang silahkan salin terlebih dahulu source code berikut ke karyawan/models.py:.............
SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
Application definition
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'kehadiran', 'karyawan', ]
.............
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Divisi (models.Model):
nama = models.CharField(max_length=100)
keterangan =models.TextField(blank=True)
def __unicode__(self):
return self.nama
class Jabatan (models.Model):
nama = models.CharField(max_length=100)
keterangan = models.TextField(blank=True)
def __unicode__(self):
return self.nama
class Karyawan (models.Model):
JENIS_KELAMIN_CHOICES = (
('pria', 'Pria'),
('wanita', 'Wanita'),
)
JENIS_KARYAWAN_CHOICES = (
('magang', 'Magang'),
('kontrak', 'Kontrak'),
('tetap', 'Tetap'),
)
nama = models.CharField(max_length=100)
alamat = models.TextField(blank=True)
jenis_kelamin = models.CharField(max_length=10, choices=JENIS_KELAMIN_CHOICES)
jenis_karyawan = models.CharField(max_length=10, choices=JENIS_KARYAWAN_CHOICES)
no_telepon = models.CharField(max_length=30, blank=True)
email = models.CharField(max_length=100, blank=True)
no_rekening = models.CharField(max_length=100)
pemilik_rekening = models.CharField(max_length=100)
divisi = models.ForeignKey(Divisi)
jabatan = models.ForeignKey(Jabatan)
def __unicode__(self):
return self.nama
class Akun (models.Model):
JENIS_AKUN_CHOICES = (
('karyawan', 'Karyawan'),
('admin', 'Administrator'),
)
akun = models.ForeignKey(User)
karyawan = models.ForeignKey(Karyawan)
jenis_akun = models.CharField(max_length=20, choices=JENIS_AKUN_CHOICES)
def __unicode__(self):
return self.karyawan.nama
Ada beberapa hal yang perlu diperhatikan dari kode diatas:
- Setiap model dideklarasikan dengan sebuah class Python yang mewarisi models.Model
- Nama model disesuaikan dengan kebutuhan Anda
- Untuk membuat sebuah kolom bertipe Varchar, digunakan CharField
- Untuk membuat sebuah kolom bertipe Text, digunakan TextField
- Parameter max_length digunakan untuk menentukan batas maksimal string yang akan disimpan
- Parameter blank digunakan agar dapat mengizinkan kolom diisi dengan string kosong
- Parameter null digunakan agar dapat mengizinkan kolom tidak diisi dengan nilai apapun
- Function unicode digunakan untuk mencetak nama baris tabel ketika dengan output sementara yang kita tentukan. Bila tidak diatur, maka ketika ditampilkan di halaman Admin akan dicetak string seperti Karyawan object
- Parameter choices akan membuat sebuah kolom menjadi tipe enum, untuk membuat sebuah CharField menjadi enum Anda harus melewatkan sebuah tuple yang berisi pilihan tersebut.
- Untuk membuat sebuah relasi di class model Django, Anda hanya perlu menentukan sebuah field yang akan menjadi ForeignKey untuk tabel tersebut terhadap tabel parent. Parameter wajib dari field ForeignKey ini adalah nama tabel yang akan menjadi parent
Karena kita ingin mengelola tabel Divisi, Jabatan, Karyawan, dan Akun di halaman admin Django, maka kita harus mendaftarkan setiap tabel di file karyawan/admin.py dengan menggunakan sintaks admin.site.register(). Pada kode diatas ada yang sedikit berbeda, parameter kedua adalah sebuah class ModelAdmin yang berguna untuk mengubah tampilan halaman django admin saat memasuki halaman yang berkaitan dengan tabel. Ada beberapa hal yang harus diperhatikan dari kode diatas:from django.contrib import admin from karyawan.models import *
Register your models here.
class DivisiAdmin (admin.ModelAdmin): list_display = ['nama', 'keterangan'] list_filter = () search_fields = ['nama', 'keterangan'] list_per_page = 25
admin.site.register(Divisi, DivisiAdmin)
class JabatanAdmin (admin.ModelAdmin): list_display = ['nama', 'keterangan'] list_filter = () search_fields = ['nama', 'keterangan'] list_per_page = 25
admin.site.register(Jabatan, JabatanAdmin)
class KaryawanAdmin (admin.ModelAdmin): list_display = ['nama', 'alamat', 'jenis_kelamin', 'jenis_karyawan', 'jabatan', 'divisi', 'email', 'no_telepon'] list_filter = ('jenis_kelamin', 'jenis_karyawan', 'jabatan', 'divisi') search_fields = ['nama', 'alamat', 'email', 'no_telepon'] list_per_page = 25
admin.site.register(Karyawan, KaryawanAdmin)
class AkunAdmin (admin.ModelAdmin): list_display = ['akun', 'karyawan', 'jenis_akun'] list_filter = ('jenis_akun',) search_fields = [] list_per_page = 25
admin.site.register(Akun, AkunAdmin)
- Setiap class tampilan Admin harus mewarisi class admin.ModelAdmin
- list_display harus diisi dengan field yang ada di model, opsi ini berguna untuk menampilkan field apa sajakah yang akan ditampilkan ketika memasuki halaman suatu model. Field yang dapat ditampilkan adalah field yang hanya berisi satu nilai
- list_filter harus diisi dengan field yang berupa relasi ke tabel lain atau berupa enum
- search_fields harus diisi dengan field yang berisi satu nilai
- list_per_page harus diisi dengan angka yang menjadi batas penampilan data suatu tabel
Jangan lupa, kita harus menampilkannya di halaman admin Django. Silahkan salin kode berikut ke file kehadiran/admin.py:from __future__ import unicode_literals
from django.db import models from karyawan.models import Karyawan
Create your models here.
class Kehadiran(models.Model): JENIS_KEHADIRAN_CHOICES = ( ('izin', 'Izin'), ('cuti', 'Cuti'), ('alpa', 'Tanpa Alasan'), ('hadir', 'Hadir'), )
karyawan = models.ForeignKey(Karyawan) jenis_kehadiran = models.CharField(max_length=20, choices=JENIS_KEHADIRAN_CHOICES) waktu = models.DateField() def __unicode__(self): return self.karyawan.nama
from django.contrib import admin
from kehadiran.models import Kehadiran
# Register your models here.
class KehadiranAdmin (admin.ModelAdmin):
list_display = ['karyawan', 'jenis_kehadiran', 'waktu']
list_filter = ('jenis_kehadiran',)
search_fields = []
list_per_page = 25
admin.site.register(Kehadiran, KehadiranAdmin)
Setelah rampung menyalin dan memahami kode diatas, saatnya migrasi database karena ada penambahan model yang akan berimbas pada penambahan tabel di database yang telah kita atur. Silahkan eksekusi perintah python manage.py makemigrations untuk menelusuri perubahan apa sajakah yang harus dilakukan. Kemudian setelah Anda membaca output yang dikeluarkan, silahkan lanjut dengan mengeksekusi perintah python manage.py migrate untuk membuat tabel dan perubahan apapun terhadap database:
$ python manage.py makemigrations
Migrations for 'kehadiran':
0001_initial.py:
- Create model Kehadiran
Migrations for 'karyawan':
0001_initial.py:
- Create model Akun
- Create model Divisi
- Create model Jabatan
- Create model Karyawan
- Add field karyawan to akun
$ python manage.py migrate
Operations to perform:
Apply all migrations: kehadiran, sessions, admin, karyawan, contenttypes, auth
Running migrations:
Rendering model states... DONE
Applying karyawan.0001_initial... OK
Applying kehadiran.0001_initial... OK
Menarik bukan? Anda tidak harus membuat file migrasi sendiri, karena cukup dengan mengubah file models.py di suatu modul, maka Django akan membuatkan file migrasi untuk Anda. Tapi pada suatu saat mungkin Anda harus mengedit file migrasi bila ada masalah yang mendesak. Sekarang mari kita lihat hasilnya dengan menjalankan web server Django dan melihat halaman admin Django di web browser.
Selamat Anda berhasil membuat modul baru dan mendaftarkannya ke halaman admin Django. Mari kita lanjutkan perjalanan kita berikutnya.
Menggunakan Halaman Admin Django - Mengelola Divisi dan Jabatan
Tak enak rasanya apabila kita tidak mencoba langsung modul yang telah kita pasang di halaman admin Django. Mari kita awali dengan mengeloa data divisi terlebih dahulu. Ketika Anda mengklik halaman divisi, Anda akan melihat sebuah tombol Add Divisi dan kolom search serta sebuah filter yang berada di sebelah kanan. Kolom search muncul karena kita mengatur search_fields di class ModelAdmin yang kita lewatkan saat mendaftarkan model Divisi. Begitupun dengan filter, dia muncul karena kita mengaturnya di class ModelAdmin yang telah kita tulis. Kemudian Anda pun dapat melihat sebuah opsi "Action" yang dapat melakukan proses bulk terhadap baris tabel yang dipilih.Ketika Anda mengklik tombol Add Item maka Anda akan melihat tampilan yang kurang lebih seperti pada gambar berikut
Begitupun dengan jabatan, tampilannya tidak berbeda jauh karena kita mendefinisikan field yang sama pada class Model Jabatan:
Menggunakan Halaman Admin Django - Mengelola Karyawan dan Akun
Selanjutnya kita akan mencoba menambahkan karyawan baru, silahkan tekan tombol "Add Karyawan" ketika memasuki halaman Karyawan.Sekarang kita dapat melihat ada satu karyawan baru yang telah dicatat oleh aplikasi mini HRD kita.
Karena nantinya, Karyawan tersebut ingin melihat data kehadirannya dan juga melakukan pengajuan cuti, maka kita perlu membuatkan akun terlebih dahulu dan menghubungkannya ke data karyawan tersebut. Kita dapat menambah akun baru di halaman User, dan menghubungkannya dengan data karyawan melalui halaman Akun.
Menggunakan Halaman Admin Django - Mengelola Kehadiran Karyawan
Selanjutnya demo yang terakhir kita akan mencatat data kehadiran dari karyawan tersebut sesuai dengan hitungan hari kerja yang berlaku. Anda dapat mulai mengisi kehadiran karyawan tersebut pada tanggal tertentu dan memilih jenis kehadiran seperti sakit, izin, cuti, bolos, dan hadir.Sekarang Anda dapat melihat data kehadiran dari karyawan tersebut berdasarkan tanggal tertentu di halaman admin Django.
Penutup
Dengan menggunakan Django, Anda dapat membuat aplikasi yang dapat digunakan untuk mengejar kebutuhan awal terlebih dahulu. Sehingga data dapat langsung dikelola dan Anda dapat mulai membuat halaman custom bila memang diperlukan. Tentu saja penggunaan halaman admin Django ini bukan opsi yang utama karena ada beberapa fitur dan widget yang terbatas.Namun pilihan ini hadir karena background Django sendiri yang lahir di dunia jurnalistik di sebuah media di Amerika Serikat. Ketika tim development harus mengejar deadline dalam membantu tim jurnalis memasukkan berita, maka halaman admin Django menjadi pilihan pertama sebelum akhirnya membuat halaman admin yang lebih sesuai dengan kebutuhan.Halaman admin Django juga belum tersedia untuk database non-relasional seperti MongoDB, Cassandra, Neo4j, ELasticsearch dan lainnya. Namun beberapa object mapper untuk database non-relasional sudah dapat diintegrasikan dengan Django. Selamat mencoba tutorial ini dan selamat ngabuburit bila Anda sedang menjalankan ibadah puasa.
(rfs/djangoproject)