Skip to content

andynur/sipustaka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SIPUSTAKA

SIPUSTAKA adalah aplikasi web berbasis Django untuk pengelolaan perpustakaan sekolah. Aplikasi ini mendukung pengelolaan data buku, data user/siswa, transaksi peminjaman, pengembalian buku, serta dashboard ringkasan untuk kebutuhan administrasi.

Nama yang digunakan pada project ini: SIPUSTAKA (Sistem Peminjaman Buku Perpustakaan)

Tujuan Proyek

Project ini disusun sebagai bahan pembelajaran dan acuan implementasi aplikasi Django sederhana untuk siswa. Karena itu, struktur dan alurnya dibuat cukup mudah dipahami, tetapi tetap mendekati pola kerja project nyata.

Teknologi yang Digunakan

  • Python
  • Django 6
  • SQLite
  • PostgreSQL
  • Template Engine Django
  • Tailwind CSS via CDN

Fitur Utama

Dashboard

Halaman dashboard menampilkan ringkasan data perpustakaan, meliputi:

  • total stok buku
  • total judul buku
  • total transaksi yang sedang dipinjam
  • total transaksi yang sudah dikembalikan
  • total transaksi terlambat
  • total seluruh transaksi
  • total user/siswa
  • jumlah user aktif dan tidak aktif
  • distribusi stok buku per kategori
  • daftar peminjaman terbaru

Manajemen Buku

Modul buku mendukung:

  • daftar buku
  • tambah buku
  • detail buku
  • edit buku
  • hapus buku

Field utama buku:

  • judul
  • pengarang
  • kategori
  • penerbit
  • tahun_terbit
  • stok
  • isbn
  • rak
  • deskripsi

Manajemen User

Modul siswa pada implementasi ini dipakai sebagai data user/peminjam. Fitur yang tersedia:

  • daftar user
  • tambah user
  • detail user
  • edit user
  • hapus user

Field utama user:

  • nama
  • kelas
  • nis
  • is_active

Manajemen Peminjaman

Modul peminjaman mendukung:

  • daftar transaksi peminjaman
  • tambah transaksi peminjaman
  • halaman konfirmasi pengembalian
  • proses pengembalian buku

Field utama transaksi:

  • siswa_id
  • buku_id
  • tanggal_pinjam
  • jatuh_tempo
  • keperluan
  • status
  • created_at

Aturan Bisnis yang Sudah Diterapkan

  • hanya user aktif yang dapat melakukan peminjaman
  • hanya buku dengan stok tersedia yang dapat dipinjam
  • jatuh_tempo tidak boleh lebih awal dari tanggal_pinjam
  • stok buku otomatis berkurang saat peminjaman dibuat
  • stok buku otomatis bertambah saat pengembalian dilakukan
  • user dengan riwayat peminjaman tidak dapat dihapus
  • proses peminjaman dan pengembalian memakai transaksi database (transaction.atomic())

Struktur Proyek

sipustaka/
├── buku/
│   ├── migrations/
│   ├── templates/
│   │   └── buku/
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── peminjaman/
│   ├── management/
│   │   ├── commands/
│   │   └── seed_data.py
│   ├── migrations/
│   ├── templates/
│   │   └── peminjaman/
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── siswa/
│   ├── migrations/
│   ├── templates/
│   │   └── siswa/
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── templates/
│   ├── includes/
│   └── dashboard.html
├── sipustaka/
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── .env.example
├── manage.py
├── README.md
└── requirements.txt

Catatan Arsitektur

Secara struktur, project ini sudah memakai pola dasar Django:

  • setiap domain utama dipisah ke app tersendiri
  • template per app sudah memakai namespace folder
  • URL per app sudah memakai namespace Django
  • migration awal sudah tersedia
  • data seed sudah disiapkan lewat management command

Namun demikian, ada satu catatan penting:

  • sebagian besar logika query pada views.py masih memakai raw SQL melalui django.db.connection

Pendekatan ini masih valid untuk pembelajaran, tetapi bukan pola paling ideal untuk project Django yang lebih besar. Pada tahap lanjutan, query tersebut sebaiknya dipindahkan bertahap ke ORM Django.

Kebutuhan Sistem

Sebelum menjalankan aplikasi, siapkan:

  • Python 3.12 atau yang kompatibel dengan Django 6
  • PostgreSQL
  • pip
  • virtual environment Python

Dependensi

Isi requirements.txt:

Django==6.0.5
psycopg2-binary==2.9.10

Konfigurasi Environment

Project ini membaca konfigurasi dari file .env di root project.

Variabel yang digunakan:

  • DJANGO_SECRET_KEY
  • DJANGO_DEBUG
  • DJANGO_ALLOWED_HOSTS
  • DJANGO_CSRF_TRUSTED_ORIGINS
  • DJANGO_LANGUAGE_CODE
  • DJANGO_TIME_ZONE
  • DATABASE_URL
  • DB_ENGINE
  • DB_NAME
  • DB_USER
  • DB_PASSWORD
  • DB_HOST
  • DB_PORT
  • STATIC_URL
  • STATIC_ROOT
  • MEDIA_URL
  • MEDIA_ROOT

Aturan pembacaan database:

  • jika DATABASE_URL diisi, nilainya dipakai terlebih dahulu
  • jika DATABASE_URL kosong, aplikasi memakai kombinasi DB_ENGINE, DB_NAME, DB_USER, DB_PASSWORD, DB_HOST, dan DB_PORT
  • pada konfigurasi sementara saat ini, SQLite dijadikan default untuk memudahkan deployment sederhana

Contoh format DATABASE_URL:

postgresql://username:password@hostname:5432/nama_database

Instalasi Lokal

1. Clone repository

git clone <url-repository>
cd sipustaka

2. Buat virtual environment

python -m venv .venv
source .venv/bin/activate

Untuk Windows:

.venv\Scripts\activate

3. Install dependensi

pip install -r requirements.txt

4. Buat file .env

cp .env.example .env

Contoh .env lokal aktif saat ini:

DJANGO_SECRET_KEY=change-this-for-local-development
DJANGO_DEBUG=True
DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost
DJANGO_CSRF_TRUSTED_ORIGINS=http://127.0.0.1:8000,http://localhost:8000
DJANGO_LANGUAGE_CODE=id-id
DJANGO_TIME_ZONE=Asia/Jakarta

DB_ENGINE=django.db.backends.sqlite3
DB_NAME=db.sqlite3

STATIC_URL=/static/
STATIC_ROOT=/Users/username/path/to/sipustaka/staticfiles
MEDIA_URL=/media/
MEDIA_ROOT=/Users/username/path/to/sipustaka/media

Jika ingin kembali ke PostgreSQL, uncomment konfigurasi berikut:

# Opsi 1: connection string penuh
# DATABASE_URL=postgresql://postgres:[email protected]:5432/sipustaka_db

# Opsi 2: konfigurasi per field
# DB_ENGINE=django.db.backends.postgresql
# DB_NAME=sipustaka_db
# DB_USER=postgres
# DB_PASSWORD=postgres
# DB_HOST=127.0.0.1
# DB_PORT=5432

5. Siapkan database

Opsi aktif saat ini: SQLite

Jika memakai SQLite, Anda tidak perlu membuat database manual. File db.sqlite3 akan dibuat otomatis saat migration dijalankan.

Opsi lanjutan: PostgreSQL

Contoh:

CREATE DATABASE sipustaka_db;

6. Jalankan migration

python manage.py migrate

7. Isi data awal

python manage.py seed_sipustaka

8. Jalankan server development

python manage.py runserver

Lalu buka:

http://127.0.0.1:8000/

Perintah Management Command

Seed data awal

python manage.py seed_sipustaka

Seeder akan menambahkan:

  • data user contoh
  • data buku contoh
  • data transaksi peminjaman contoh

Seeder akan berhenti jika tabel peminjaman sudah berisi data.

Reset dan isi ulang data demo

python manage.py reset_seed_sipustaka

Command ini akan:

  • menghapus data peminjaman
  • menghapus data buku
  • menghapus data siswa
  • menjalankan seed ulang

Gunakan command ini hanya untuk development, demo, atau pembelajaran.

Schema Manual

Jika Anda ingin membuat tabel secara manual tanpa migration, berikut schema minimum yang sesuai dengan implementasi project.

Tabel buku

CREATE TABLE buku (
    id SERIAL PRIMARY KEY,
    judul VARCHAR(255) NOT NULL,
    pengarang VARCHAR(255) NOT NULL,
    kategori VARCHAR(100) NOT NULL,
    penerbit VARCHAR(255) NOT NULL,
    tahun_terbit INTEGER NOT NULL,
    stok INTEGER NOT NULL DEFAULT 0,
    isbn VARCHAR(50) NOT NULL,
    rak VARCHAR(100) NOT NULL,
    deskripsi TEXT
);

Tabel siswa

CREATE TABLE siswa (
    id SERIAL PRIMARY KEY,
    nama VARCHAR(255) NOT NULL,
    kelas VARCHAR(100) NOT NULL,
    nis VARCHAR(50) NOT NULL,
    is_active BOOLEAN NOT NULL DEFAULT TRUE
);

Tabel peminjaman

CREATE TABLE peminjaman (
    id SERIAL PRIMARY KEY,
    siswa_id INTEGER REFERENCES siswa(id),
    buku_id INTEGER REFERENCES buku(id),
    tanggal_pinjam DATE NOT NULL,
    jatuh_tempo DATE NOT NULL,
    keperluan VARCHAR(255) NOT NULL,
    status VARCHAR(50) NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Cara Menggunakan Aplikasi

1. Dashboard

  • buka halaman utama /
  • lihat ringkasan stok, transaksi, dan user

2. Kelola Buku

  • buka menu Buku
  • gunakan tombol Tambah Buku untuk menambah data
  • gunakan tombol Detail, Edit, dan Hapus pada tabel daftar buku

3. Kelola User

  • buka menu User
  • gunakan tombol Tambah User untuk menambah data
  • gunakan tombol Detail, Edit, dan Hapus pada tabel daftar user

4. Kelola Peminjaman

  • buka menu Peminjaman
  • klik Pinjam Buku untuk membuat transaksi baru
  • klik Kembalikan untuk membuka halaman konfirmasi pengembalian

Deployment ke PythonAnywhere

Skenario deployment sederhana yang dipakai sementara pada project ini:

  • PythonAnywhere digunakan untuk hosting aplikasi Django
  • database memakai SQLite agar setup lebih ringan
  • konfigurasi PostgreSQL tetap disimpan dalam bentuk komentar agar mudah diaktifkan kembali nanti

Pendekatan ini paling cocok untuk:

  • demo sederhana
  • pembelajaran siswa
  • deployment awal tanpa ketergantungan database eksternal

Catatan penting

Berdasarkan dokumentasi resmi PythonAnywhere yang saya cek pada 8 Juni 2026:

  • PostgreSQL bawaan PythonAnywhere tersedia pada plan berbayar sebagai add-on
  • koneksi dari aplikasi PythonAnywhere ke database eksternal memerlukan akun berbayar
  • akun gratis baru memiliki pembatasan outbound internet

Karena itu, untuk deployment sederhana dan cepat, SQLite adalah pilihan yang paling aman.

Contoh .env untuk PythonAnywhere

DJANGO_SECRET_KEY=ganti-dengan-secret-key-production-yang-aman
DJANGO_DEBUG=False
DJANGO_ALLOWED_HOSTS=yourusername.pythonanywhere.com
DJANGO_CSRF_TRUSTED_ORIGINS=https://yourusername.pythonanywhere.com
DJANGO_LANGUAGE_CODE=id-id
DJANGO_TIME_ZONE=Asia/Jakarta

DB_ENGINE=django.db.backends.sqlite3
DB_NAME=db.sqlite3

STATIC_URL=/static/
STATIC_ROOT=/home/yourusername/sipustaka/staticfiles
MEDIA_URL=/media/
MEDIA_ROOT=/home/yourusername/sipustaka/media

Jika nanti ingin kembali memakai PostgreSQL, uncomment konfigurasi PostgreSQL yang sudah disiapkan di .env atau .env.example.

Langkah deployment

1. Upload source code

git clone <url-repository> ~/sipustaka
cd ~/sipustaka

2. Buat virtualenv

mkvirtualenv --python=/usr/bin/python3.13 sipustaka-venv
workon sipustaka-venv
pip install -r requirements.txt

Pastikan versi Python virtualenv sama dengan versi Python saat membuat web app.

3. Buat file .env

cp .env.example .env

Untuk mode sederhana, cukup gunakan konfigurasi SQLite yang sudah aktif. Jika nanti ingin memakai PostgreSQL, uncomment bagian PostgreSQL di .env lalu isi sesuai connection string yang diberikan.

4. Buat web app di PythonAnywhere

Di tab Web:

  1. klik Add a new web app
  2. pilih Manual configuration
  3. pilih versi Python yang sama dengan virtualenv
  4. isi Virtualenv dengan sipustaka-venv
  5. isi Source code dan Working directory dengan /home/yourusername/sipustaka

5. Atur file WSGI PythonAnywhere

PythonAnywhere tidak memakai file sipustaka/wsgi.py milik project secara langsung. Yang harus diedit adalah file WSGI milik web app PythonAnywhere di tab Web.

Contoh isi minimal:

import os
import sys

path = '/home/yourusername/sipustaka'
if path not in sys.path:
    sys.path.insert(0, path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'sipustaka.settings'

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Karena project ini sudah membaca .env langsung dari root project melalui settings.py, Anda tidak perlu menambahkan loader .env lagi di file WSGI.

6. Jalankan migration

cd ~/sipustaka
workon sipustaka-venv
python manage.py migrate

7. Isi data awal

python manage.py seed_sipustaka

8. Kumpulkan static files

python manage.py collectstatic --noinput

9. Atur static mapping

Di tab Web -> Static files, tambahkan:

  • URL: /static/
  • Directory: /home/yourusername/sipustaka/staticfiles

Jika nanti menggunakan media upload, tambahkan juga:

  • URL: /media/
  • Directory: /home/yourusername/sipustaka/media

10. Reload web app

Kembali ke tab Web, lalu klik Reload.

Checklist deployment

Pastikan hal-hal berikut sudah benar:

  • DEBUG=False
  • ALLOWED_HOSTS berisi domain PythonAnywhere
  • CSRF_TRUSTED_ORIGINS berisi URL https://...pythonanywhere.com
  • database sudah sesuai dengan mode yang dipilih
  • collectstatic sudah dijalankan
  • static mapping sudah benar
  • migration berhasil dijalankan

Troubleshooting singkat

Jika aplikasi gagal tampil:

  • cek Error log di tab Web
  • cek path project dan virtualenv
  • cek isi .env
  • cek ALLOWED_HOSTS dan CSRF_TRUSTED_ORIGINS
  • jalankan python manage.py check
  • jika memakai PostgreSQL, pastikan host database dapat diakses dari PythonAnywhere

Kondisi Project Saat Ini

Hal yang sudah tersedia:

  • struktur app sudah dipisah dengan cukup rapi
  • template sudah memakai namespace per app
  • migration awal sudah tersedia
  • seeder data awal sudah tersedia
  • konfigurasi environment sudah memakai .env
  • project sudah mendukung DATABASE_URL
  • SQLite sekarang dijadikan mode aktif default untuk deployment sederhana

Hal yang masih perlu dikembangkan:

  • query raw SQL masih dominan di layer view
  • belum ada autentikasi dan otorisasi pengguna
  • belum ada pagination dan pencarian data
  • belum ada pengelolaan denda keterlambatan
  • test otomatis masih sangat minim

Rekomendasi Pengembangan Lanjutan

Jika project ini ingin dikembangkan lebih lanjut, urutan prioritas yang disarankan:

  1. pindahkan query raw SQL ke ORM Django secara bertahap
  2. tambahkan forms.py untuk validasi form yang lebih idiomatik
  3. tambahkan autentikasi login admin/petugas
  4. tambahkan pagination, pencarian, dan filter data
  5. tambahkan pengelolaan denda dan status keterlambatan otomatis
  6. tambahkan unit test dan integration test
  7. rapikan pemisahan service logic dari view

Ringkasan Modul

Modul sipustaka

Berfungsi sebagai project Django utama:

  • settings.py untuk konfigurasi
  • urls.py untuk routing global
  • views.py untuk dashboard

Modul buku

Berfungsi untuk pengelolaan koleksi buku:

  • daftar buku
  • detail buku
  • tambah buku
  • edit buku
  • hapus buku

Modul siswa

Berfungsi untuk pengelolaan data user/peminjam:

  • daftar user
  • detail user
  • tambah user
  • edit user
  • hapus user

Modul peminjaman

Berfungsi untuk pengelolaan transaksi sirkulasi buku:

  • daftar peminjaman
  • tambah peminjaman
  • konfirmasi pengembalian
  • proses pengembalian

Status Proyek

Status saat ini:

  • layak digunakan sebagai bahan pembelajaran
  • fitur dasar perpustakaan sudah berjalan
  • sudah siap dijadikan acuan deployment sederhana
  • belum ditujukan sebagai sistem production-ready

Lisensi

Belum ada lisensi yang didefinisikan pada repository ini. Jika project akan dipublikasikan lebih luas, sebaiknya tambahkan file LICENSE.

Referensi Resmi

About

SIPUSTAKA (Sistem Peminjamam Buku Perpustakaan - HSI Boarding School Project

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors