Django : Membuat Decorator Pattern User Verifikasi Email

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan !
Django : Membuat Decorator Pattern User Verifikasi Email
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 !

Apa Itu Decorator ?


Secara sederhana Decorator adalah sebuah fungsi yang membungkus fungsi yang lain. Decorator digunakan dalam kondisi di mana sebuah objek memiliki responsibility yang didapatkan dari objek yang lain. Responsibility ini menyebabkan adanya nilai tambah pada objek tersebut.

Apa Keuntungan Penggunaan Decorator ?


Dengan Decorator Pattern, didapatkak keuntungan-keuntungan sebagai berikut :


  1. More flexibility then static inheritance. Decorator Pattern fleksibel dalam menambahan responsibilitas pada objek dibandingkan dengan memiliki banyak inheritance di dalam objek ConcreteComponent. Dengan decorator, responsibilitas dapat ditambahkan maupun dikurangi dengan cara yang sederhana (dengan attach dan detach). Jika dengan cara biasa, kita harus membuat multiple inheritance pada objek secara manual.

  2. Avoids feature-laden classes high up in the hierarchy. Decorator Pattern menawarkan cara yang adil dalam memberikan responsibilitas. Pada kasus yang lebih kompleks, kita dapat dengan mudah menambahkan responsibilitas tanpa harus meng-inheritance objek fitur sebelum ditambahkan. Konsep Decorator Pattern dapat dianalogikan kita membeli apa yang kita gunakan. Dengan konsep ini, objek ConcreteDecorator dapat berdiri tanpa harus dependent ke objek ConcreteComponent.

  3. A decorator and its component aren’t identical. Objek Decorator bertindak layaknya objek transparant, di mana saat ditambahkan, ConcreteComponent tidak perlu menginisiasi objek ConcreteDecorator secara jelas. Ini akan meningkatkan fleksibilitas dalam penulisan inheritance objek.

  4. Lots of little objects. Dengan konsep Decorator Pattern, memungkinkan akan menghasilkan banyak objek spesifik. Masing-masing fitur direpresentasikan pada objek ConcreteDecorator yang berbeda-beda. Ini memberikan keleluasaan untuk memodifikasi fitur yang ada di dalamnya. Untuk itu, dibutuhkan dokumentasi teknis agar kita dapat memahami peran masing-masing objek.


Baca Juga : Bekerja lebih produktif dengan docker

Bagaimana Penggunaan Decorator Pada Bahasa Python ?


penggunaan dan pembuatan decorator pada bahasa cukup simple dan sederhana, perhatikan kode dibawah ini :

def decorateMyFunction(originalFunction):
'''Decorates a function by wrapping its return value in a pair of HTML paragraph tags.'''
def addAdditionalText():
obtain string returned by original function
add text to the string
return new string
return addAdditionalText


@decorateMyFunction
def functionToBeDecorated():
return True

Studi Kasus


Buat sebuah decorator untuk memvalidasi user login dengan status email verified = True

Perhatikan struktur table auth_user dan account_emailaddress dibawah ini :

CREATE TABLE auth_user (
id serial NOT NULL,
last_login timestamptz NULL,
username varchar(150) NOT NULL,
first_name varchar(30) NOT NULL,
last_name varchar(150) NOT NULL,
email varchar(254) NOT NULL,
is_staff bool NOT NULL,
is_active bool NOT NULL,
date_joined timestamptz NOT NULL
);

CREATE TABLE account_emailaddress (
id serial NOT NULL,
email varchar(254) NOT NULL,
verified bool NOT NULL,
"primary" bool NOT NULL,
user_id int4 NOT NULL
);

Method Decorator


Kita akan membuat validasi menggunakan decorator, dengan kondisi jika user login dengan email belum terverifikasi maka sistem akan memberikan informasi "Email Anda Belum Terverifikasi", perhatikan kode dibawah ini :

from allauth.account.models import EmailAddress

def email_verified(function):
def wrapper(request, *args, **kw):
user=request.user
chek_user = EmailAddress.objects.filter(user_id=user.id)
if chek_user:
chek_user = chek_user.first()
if chek_user.verified is False :
return HttpResponseRedirect('/users/no-email-verification')
else:
return function(request, *args, **kw)
else:
return HttpResponseRedirect('/')
return wrapper

Implementasi Method Decorator


seperti yang telah kita jelaskan diatas, implementasi Decorator pada bahasa python cukup sederhana, pehatikan kode dibawah ini :

 

from apps.utils import email_verified

class DashboardTemplateView(TemplateView):
template_name = 'home/index.html'

@method_decorator(email_verified)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context

 

 

Baca artikel lainya :