Asynchronous Tasks dengan Django dan Celery

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan !
Asynchronous Tasks dengan Django dan Celery
Xiaomi Smart Band 9 Pro

Xiaomi Smart Band 9 Pro

Dilengkapi GNSS bawaan dan kompas, Kamu bisa menjelajah dengan percaya diri. Daya Tahan Luar Biasa dengan performa optimal tahan baterai hingga 21 hari. Desain Elegan dan Trendy Tidak hanya handal, Xiaomi Smart Band 9 Pro ini juga tampil memukau dengan frame alloy aluminium berwarna yang memancarkan kesan premium, dipadukan dengan strap trendi yang cocok untuk setiap gaya, baik untuk olahraga maupun acara formal.

Free Klik Disini !

Pada artikel sebelumnya kita sudah membahas tentang :


pada artikel kali ini kita akan membuat sebuah form register dengan studi kasus sebagai berikut :

  • Setelah registrasi berhasil, sitem akan mengirimkan email dan bersamaan dengan itu memberikan respon status registrasi berhasil


Form Registrasi

buat sebuah form registrasi dengan nama register.html, perhatikan kode berikut :

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
font-family: Arial, Helvetica, sans-serif;
background-color: black;
}

* {
box-sizing: border-box;
}

/* Add padding to containers */
.container {
padding: 16px;
background-color: white;
}

/* Full-width input fields */
input[type=text], input[type=password] {
width: 100%;
padding: 15px;
margin: 5px 0 22px 0;
display: inline-block;
border: none;
background: #f1f1f1;
}

input[type=text]:focus, input[type=password]:focus {
background-color: #ddd;
outline: none;
}

/* Overwrite default styles of hr */
hr {
border: 1px solid #f1f1f1;
margin-bottom: 25px;
}

/* Set a style for the submit button */
.registerbtn {
background-color: #4CAF50;
color: white;
padding: 16px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
opacity: 0.9;
}

.registerbtn:hover {
opacity: 1;
}

/* Add a blue text color to links */
a {
color: dodgerblue;
}

/* Set a grey background color and center the text of the "sign in" section */
.signin {
background-color: #f1f1f1;
text-align: center;
}
</style>
</head>
<body>

<form action="{% url 'register_views' %}" method="POST">
<div class="container">
<h1>Register</h1>
<p>Please fill in this form to create an account.</p>
<hr>

<label for="email"><b>Email</b></label>
<input type="text" placeholder="Enter Email" name="email" required>

<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="psw" required>

<label for="psw-repeat"><b>Repeat Password</b></label>
<input type="password" placeholder="Repeat Password" name="psw-repeat" required>
<hr>
<p>By creating an account you agree to our <a href="#">Terms & Privacy</a>.</p>

<button type="submit" class="registerbtn">Register</button>
</div>

<div class="container signin">
<p>Already have an account? <a href="#">Sign in</a>.</p>
</div>
</form>

</body>
</html>

 

buat sebuah class, kita beri nama RegisterView. perhatikan kode di bawah ini

from django.shortcuts import render
from django.views.generic import TemplateView
from django.contrib import messages

# Create your views here.
class RegisterView(TemplateView):
template_name = 'register.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context

def post(self,request,*args, **kwargs):
context = self.get_context_data()
email = request.POST.get('email')
psw = request.POST.get('psw')
psw_repeat = request.POST.get('psw-repeat')
if psw == psw_repeat:
messages.error(request, {'alert':'register success'})
else:
messages.error(request, {'alert':'register failed'})
context['alert'] = True
return super(TemplateView, self).render_to_response(context)

Task

diatas kita telah membuat form register, selanjutnya kita akan membuat task ashinc untuk melakukan proses pengiriman email

buat file dengan nama task.py dan function dengan nama send_email, perhatikan kode dibawah ini :

from celery.utils.log import get_task_logger
from celery import shared_task

logger = get_task_logger(__name__)

@shared_task
def send_email():
logger.info("email berhasil di kirim")

 

panggil function send email, perhatikan kode di bawah ini

 

if psw == psw_repeat:
send_email.delay()
messages.error(request, {'alert':'register success'})
else:
messages.error(request, {'alert':'register failed'})

 

pada kode diatas kita telah mengintegrasikan celery dan django @share_task, akan megeksekusi function send_email menjadi Asynchronous. sebelum menguji apakah aplikasi kita berhasil atau tidak jalankan celery

celery -A firstproject worker -l info

baca artikel lainya :

 

pada sesi akhir tutorial Task Scheduler Celery Redis akan membahas tentang Task scheduler dengan django celery beat

Download full source disini