I. Pendahuluan

Dalam bagian ini, kita akan membahas secara singkat tentang apa yang akan dibahas dalam tutorial ini, serta memberikan gambaran umum tentang aplikasi pengelolaan tugas yang akan kita bangun menggunakan Django dan Celery.

Tujuan Tutorial

Tutorial ini bertujuan untuk memberikan panduan langkah demi langkah tentang bagaimana membangun aplikasi pengelolaan tugas menggunakan Django sebagai framework web utama dan Celery sebagai sistem antrian tugas latar belakang.

Daftar Isi
Mengapa Django dan Celery?
  • Django: Django adalah framework web Python yang kuat dan populer yang menyediakan alat yang kaya untuk membangun aplikasi web yang kompleks dengan cepat dan efisien. Dengan fitur-fitur seperti ORM yang kuat, sistem admin bawaan, dan dukungan untuk berbagai macam ekstensi, Django sangat cocok untuk membangun aplikasi manajemen tugas.
  • Celery: Celery adalah sistem antrian tugas latar belakang yang memungkinkan kita untuk menjalankan tugas-tugas yang memakan waktu tanpa menghambat responsivitas aplikasi web kita. Dengan Celery, kita dapat menjalankan tugas-tugas seperti pengiriman email, pengolahan data, dan tugas berjadwal secara asinkron.
Tentang Aplikasi Pengelolaan Tugas

Aplikasi pengelolaan tugas adalah aplikasi yang memungkinkan pengguna untuk membuat, mengatur, dan melacak tugas-tugas mereka. Dalam tutorial ini, kita akan membangun aplikasi sederhana yang memungkinkan pengguna untuk:

  • Membuat tugas baru dengan judul, deskripsi, dan batas waktu.
  • Menandai tugas sebagai selesai atau belum selesai.
  • Menghapus atau mengedit tugas yang sudah ada.
  • Menjadwalkan tugas-tugas berulang dengan menggunakan Celery.

Dengan membangun aplikasi pengelolaan tugas ini, Anda akan mendapatkan pemahaman yang lebih baik tentang bagaimana menggunakan Django dan Celery bersama-sama untuk membangun aplikasi web yang kuat dan efisien.

II. Persiapan Lingkungan Pengembangan

Dalam bagian ini, kita akan membahas langkah-langkah yang diperlukan untuk menyiapkan lingkungan pengembangan untuk memulai pembangunan aplikasi pengelolaan tugas dengan Django dan Celery.

Instalasi Django dan Celery

Sebelum memulai, pastikan Anda telah menginstal Django dan Celery di lingkungan pengembangan Anda. Gunakan pip untuk menginstal keduanya:

pip install django celery
Konfigurasi Proyek Django untuk Menggunakan Celery
  1. Membuat Proyek Django: Buat proyek Django baru dengan menjalankan perintah berikut: django-admin startproject nama_proyek
  2. Konfigurasi Settings.py: Buka file settings.py dalam proyek Anda dan tambahkan konfigurasi Celery di bagian bawah file:
    # settings.py

    # Konfigurasi Celery from celery import Celery

    # Inisialisasi objek Celery
    celery_app = Celery('nama_proyek')

    # Konfigurasi Celery celery_app.config_from_object('django.conf:settings', namespace='CELERY')

    # Muat tugas-tugas Celery dari semua aplikasi Django celery_app.autodiscover_tasks()
  3. Membuat File Konfigurasi Celery: Buat file celery.py di dalam direktori proyek Anda dan tambahkan konfigurasi seperti di bawah ini:

    # celery.py

    import os from celery import Celery

    # Setelah melakukan impor Django, agar Celery dapat menggunakan settings.py
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nama_proyek.settings')

    # Inisialisasi objek Celery celery_app = Celery('nama_proyek')

    # Konfigurasi Celery celery_app.config_from_object('django.conf:settings', namespace='CELERY')

    # Muat tugas-tugas Celery dari semua aplikasi Django celery_app.autodiscover_tasks()

Dengan langkah-langkah di atas, lingkungan pengembangan Anda sudah siap untuk memulai pembangunan aplikasi pengelolaan tugas dengan Django dan Celery. Selanjutnya, kita akan membangun model dan basis data untuk aplikasi kita.

III. Membuat Model dan Basis Data

Dalam bagian ini, kita akan membuat model Django untuk merepresentasikan tugas dalam aplikasi pengelolaan tugas kita, serta membuat migrasi basis data untuk mengaplikasikan perubahan tersebut ke dalam database.

Desain Model Tugas

Sebelum membuat model, pertimbangkan elemen apa yang perlu dimasukkan dalam model tugas. Misalnya, mungkin kita ingin menyimpan judul tugas, deskripsi, status apakah tugas telah selesai atau belum, dan batas waktu tugas. Berikut adalah contoh desain model yang sederhana:

# models.py

from django.db import models

class Tugas(models.Model):
    judul = models.CharField(max_length=100)
    deskripsi = models.TextField()
    selesai = models.BooleanField(default=False)
    batas_waktu = models.DateTimeField()

    def __str__(self):
        return self.judul
Membuat Migrasi Basis Data

Setelah mendefinisikan model, kita perlu membuat migrasi untuk menerapkan perubahan ini ke dalam database. Gunakan perintah makemigrations untuk membuat file migrasi:

python manage.py makemigrationsCode language: CSS (css)

Perintah ini akan membuat file migrasi baru di dalam direktori migrations di dalam aplikasi Anda. Untuk menerapkan migrasi, gunakan perintah migrate:

python manage.py migrateCode language: CSS (css)

Setelah menjalankan perintah ini, model Tugas akan dibuat di dalam basis data, dan kita siap untuk menggunakan model tersebut di dalam aplikasi kita.

Dengan langkah-langkah di atas, kita telah berhasil membuat model untuk merepresentasikan tugas dalam aplikasi pengelolaan tugas kita dan menerapkannya ke dalam basis data. Selanjutnya, kita akan melanjutkan dengan membuat tugas Celery untuk aplikasi kita.

IV. Membuat Tugas Celery

Dalam bagian ini, kita akan mendefinisikan tugas-tugas Celery yang akan digunakan dalam aplikasi pengelolaan tugas kita. Tugas-tugas ini akan bertanggung jawab untuk berbagai operasi, seperti membuat, memperbarui, dan menghapus tugas.

Mendefinisikan Tugas-tugas Celery

Kita akan menggunakan Celery untuk membuat tugas-tugas yang akan dijalankan secara asinkron. Tugas-tugas ini akan dibuat sebagai fungsi Python biasa yang didekorasi dengan @celery_app.task.

Misalnya, kita dapat membuat tugas-tugas sebagai berikut:

# tasks.py

from celery import shared_task
from .models import Tugas

@shared_task
def buat_tugas(judul, deskripsi, batas_waktu):
    """
    Tugas Celery untuk membuat tugas baru.
    """
    tugas_baru = Tugas.objects.create(judul=judul, deskripsi=deskripsi, batas_waktu=batas_waktu)
    return tugas_baru.id

@shared_task
def perbarui_tugas(tugas_id, judul, deskripsi, batas_waktu, selesai):
    """
    Tugas Celery untuk memperbarui tugas yang ada.
    """
    tugas = Tugas.objects.get(id=tugas_id)
    tugas.judul = judul
    tugas.deskripsi = deskripsi
    tugas.batas_waktu = batas_waktu
    tugas.selesai = selesai
    tugas.save()
    return tugas.id

@shared_task
def hapus_tugas(tugas_id):
    """
    Tugas Celery untuk menghapus tugas.
    """
    Tugas.objects.filter(id=tugas_id).delete()Code language: PHP (php)

Dengan mendefinisikan tugas-tugas Celery ini, kita dapat menggunakan Celery untuk menjalankan operasi-operasi tersebut secara asinkron, sehingga tidak akan memblokir proses utama aplikasi.

Mengintegrasikan Tugas-tugas dengan Model Tugas

Sekarang, kita telah mendefinisikan tugas-tugas Celery, kita perlu mengintegrasikannya dengan model Tugas. Kita dapat melakukan ini dengan memanggil tugas-tugas Celery di dalam metode model, atau dengan memanggilnya langsung dari tampilan (views).

Dengan langkah ini, kita telah berhasil membuat tugas-tugas Celery yang akan digunakan dalam aplikasi pengelolaan tugas kita. Selanjutnya, kita akan mempelajari cara menggunakan Celery Beat untuk menjadwalkan tugas-tugas berulang.

V. Penggunaan Tugas Berjadwal

Dalam bagian ini, kita akan mempelajari cara menggunakan Celery Beat untuk menjadwalkan tugas-tugas berulang di aplikasi pengelolaan tugas kita. Celery Beat adalah bagian dari Celery yang memungkinkan kita untuk menjadwalkan tugas-tugas untuk dieksekusi secara periodik.

Mengkonfigurasi Celery Beat
  1. Instalasi Django Celery Beat: Pastikan Django Celery Beat sudah diinstal dalam proyek Anda. Anda dapat menginstalnya dengan menggunakan pip: pip install django-celery-beat
  2. Tambahkan ke INSTALLED_APPS: Buka file settings.py dalam proyek Anda dan tambahkan 'django_celery_beat' ke dalam INSTALLED_APPS: # settings.py INSTALLED_APPS = [ ... 'django_celery_beat', ]
  3. Konfigurasi Celery Beat Scheduler: Buka file settings.py dan tambahkan konfigurasi untuk Celery Beat: # settings.py # Konfigurasi Celery Beat CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
Menjadwalkan Tugas-tugas Berulang

Sekarang, kita dapat menggunakan Celery Beat untuk menjadwalkan tugas-tugas berulang. Contohnya, mari kita jadwalkan tugas untuk mengirim pemberitahuan kepada pengguna jika ada tugas yang melewati batas waktu:

# tasks.py

from celery import shared_task
from .models import Tugas
from django.utils import timezone

@shared_task
def peringatkan_tugas_terlambat():
    """
    Tugas Celery untuk mengirim pemberitahuan kepada pengguna tentang tugas yang terlambat.
    """
    tugas_terlambat = Tugas.objects.filter(batas_waktu__lt=timezone.now(), selesai=False)
    for tugas in tugas_terlambat:
        # Kirim pemberitahuan kepada pengguna tentang tugas yang terlambat
        # Implementasikan logika pengiriman pemberitahuan di sini
        passCode language: PHP (php)

Kemudian, kita dapat menambahkan tugas ini ke dalam konfigurasi Celery Beat di dalam file celery.py:

# celery.py

from celery import Celery
from celery.schedules import crontab

app = Celery('proj')

# Konfigurasi Celery
app.conf.update(
    ...
    CELERY_BEAT_SCHEDULE = {
        'peringatkan-tugas-terlambat': {
            'task': 'app.tasks.peringatkan_tugas_terlambat',
            'schedule': crontab(minute=0, hour=0),  # Jalankan setiap tengah malam
        },
    }
)Code language: PHP (php)

Dengan menggunakan Celery Beat, kita dapat menjadwalkan tugas-tugas berulang seperti pengiriman pemberitahuan, pembaruan data, dan tugas-tugas lainnya secara periodik dalam aplikasi kita.

Dengan langkah-langkah ini, kita telah berhasil menggunakan Celery Beat untuk menjadwalkan tugas-tugas berulang di dalam aplikasi pengelolaan tugas kita. Selanjutnya, kita akan melanjutkan dengan mengintegrasikan antarmuka pengguna dengan tugas-tugas Celery yang telah kita buat.

VI. Integrasi dengan Antarmuka Pengguna

Dalam bagian ini, kita akan mempelajari cara mengintegrasikan tugas-tugas Celery yang telah kita buat dengan antarmuka pengguna (UI) aplikasi pengelolaan tugas menggunakan Django. Pengguna akan dapat membuat, mengedit, dan menghapus tugas melalui antarmuka pengguna.

Membuat Tampilan Django

Kita akan membuat tampilan Django yang memanfaatkan tugas-tugas Celery untuk melakukan operasi CRUD (Create, Read, Update, Delete) pada tugas-tugas.

Misalnya, mari kita tambahkan tampilan untuk menampilkan daftar tugas:

# views.py

from django.shortcuts import render
from .models import Tugas

def daftar_tugas(request):
    """
    Tampilan untuk menampilkan daftar tugas.
    """
    tugas = Tugas.objects.all()
    return render(request, 'daftar_tugas.html', {'tugas': tugas})Code language: PHP (php)
Menambahkan Formulir untuk Tugas Baru

Selanjutnya, kita akan menambahkan formulir Django untuk membuat tugas baru. Formulir ini akan mengirimkan data ke tugas-tugas Celery yang telah kita definisikan sebelumnya.

# forms.py

from django import forms

class FormulirTugas(forms.Form):
    judul = forms.CharField(max_length=100)
    deskripsi = forms.CharField(widget=forms.Textarea)
    batas_waktu = forms.DateTimeField()
Menggunakan Tugas-tugas Celery dari Tampilan

Terakhir, kita akan menggunakan tugas-tugas Celery yang telah kita definisikan dalam tampilan Django untuk melakukan operasi CRUD pada tugas-tugas.

Misalnya, mari kita tambahkan logika untuk membuat tugas baru:

# views.py

from django.shortcuts import render, redirect
from .forms import FormulirTugas
from .tasks import buat_tugas

def buat_tugas_view(request):
    """
    Tampilan untuk membuat tugas baru.
    """
    if request.method == 'POST':
        form = FormulirTugas(request.POST)
        if form.is_valid():
            judul = form.cleaned_data['judul']
            deskripsi = form.cleaned_data['deskripsi']
            batas_waktu = form.cleaned_data['batas_waktu']
            # Memanggil tugas Celery untuk membuat tugas baru
            buat_tugas.delay(judul, deskripsi, batas_waktu)
            return redirect('daftar-tugas')
    else:
        form = FormulirTugas()
    return render(request, 'buat_tugas.html', {'form': form})Code language: PHP (php)

Dengan mengintegrasikan tugas-tugas Celery dengan antarmuka pengguna, pengguna sekarang dapat berinteraksi dengan aplikasi pengelolaan tugas melalui browser web mereka. Mereka dapat membuat, mengedit, dan menghapus tugas dengan mudah menggunakan formulir dan tampilan yang telah kita buat.

VII. Manajemen Antrian Tugas

Dalam bagian ini, kita akan membahas cara mengelola antrian tugas Celery menggunakan Celery Flower. Celery Flower adalah alat pengelolaan antrian tugas Celery yang memungkinkan kita untuk memantau, menganalisis, dan mengelola antrian tugas secara visual melalui antarmuka pengguna web.

Instalasi Celery Flower
  1. Instalasi: Pastikan Celery Flower sudah diinstal dalam proyek Anda. Anda dapat menginstalnya menggunakan pip: pip install flower
  2. Menjalankan Celery Flower: Jalankan Celery Flower dengan perintah berikut: celery -A nama_proyek flower
  3. Akses Antarmuka Pengguna: Setelah menjalankan Celery Flower, Anda dapat mengakses antarmuka pengguna di http://localhost:5555.
Memantau dan Menganalisis Antrian Tugas

Dengan Celery Flower, Anda dapat melihat antrian tugas yang sedang berjalan, tugas-tugas yang sedang ditunda, dan tugas-tugas yang telah selesai. Anda juga dapat melihat metrik kinerja seperti jumlah tugas yang berhasil, waktu eksekusi rata-rata, dan lain-lain.

Menghentikan dan Menjalankan Tugas-tugas

Anda juga dapat menghentikan dan menjalankan tugas-tugas secara manual melalui antarmuka pengguna Celery Flower. Ini dapat berguna jika Anda perlu menghentikan antrian tugas sementara untuk melakukan pemeliharaan atau jika Anda ingin memprioritaskan tugas tertentu.

Dengan menggunakan Celery Flower, Anda dapat dengan mudah mengelola antrian tugas Celery Anda dan memantau kinerjanya secara real-time melalui antarmuka pengguna web yang intuitif.

Dengan langkah-langkah ini, kita telah berhasil membahas cara mengelola antrian tugas Celery menggunakan Celery Flower. Sekarang, kita memiliki alat yang kuat untuk memantau dan mengelola tugas-tugas yang sedang berjalan di aplikasi pengelolaan tugas kita.

Categories: Django