Sunday, July 26, 2020

Membuat Aplikasi Mengirim Link Aktivasi ke Email Menggunakan Django


Django merupakan salah satu framework berbasis python yang paling populer, dengan dukungan komunitas yang besar dan penggunaan yang sangat banyak tidak heran framework ini menjadi salah satu framework terbaik saat ini dan mungkin di masa depan yang berbasis python.

Saat ini saya akan berbagi bagaimana mengirim email menggunakan django. Langkah yang dilakukan adalah sebagai berikut:
  • Install django.
  • Buat project dan aplikasi. 
  • Pada file settings.py di folder project masukan seting untuk email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  
MAILER_EMAIL_BACKEND = EMAIL_BACKEND  
EMAIL_HOST = 'smtp.gmail.com'  
EMAIL_HOST_PASSWORD = '<Password>'  
EMAIL_HOST_USER = '<user gmail>'  
EMAIL_PORT = 587
EMAIL_USE_SSL = True  
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
  • Kemudian buka shell python
(venv) E:\Python\py_movie_api>python manage.py shell
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.mail import send_mail
>>> send_mail('subject', 'here is the message.', 'okuselatan2020@gmail.com',['wawanhn@gmail.com'],fail_silently=False,)
1


  • Pada gambar di atas terlihat satus setelah kita mengirim email adalah 1, yang artinya kita sukses mengirim email. Silahkan cek email dan pastikan pesan sudah diterima.
  • Buat folder templates/accounts di folder project kita, lalu buat file signup.html
<!DOCTYPE html>  
    <html lang="en">  
    <head>  
        <title>Signup</title>  
        <meta charset="utf-8">  
        <meta name="viewport" content="width=device-width, initial-scale=1">  
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">  
    </head>  
    <body><div class="container" style="margin-top: 50px;">  
        <div class="row justify-content-center">  
            <div class="col-md-5 shadow-sm p-3 mb-5 bg-white rounded">  
                <h2>Signup</h2>  
                <form method="post">  
                    {% csrf_token %}  
                    <div class="form-group">  
                        <label for="first_name">First Name:</label>  
                        <input type="text" class="form-control" id="first_name" placeholder="Enter first name"  
      name="first_name">  
                    </div>  
                    <div class="form-group">  
                        <label for="last_name">Last Name:</label>  
                        <input type="text" class="form-control" id="last_name" placeholder="Enter last name"  
      name="last_name">  
                    </div>  
                    <div class="form-group">  
                        <label for="username">Username:</label>  
                        <input type="text" class="form-control" id="username" placeholder="Enter username" name="username">  
                    </div>  
                    <div class="form-group">  
                        <label for="email">Email:</label>  
                        <input type="email" class="form-control" id="email" placeholder="Enter email" name="email">  
                    </div>  
                    <div class="form-group">  
                        <label for="pwd1">Password:</label>  
                        <input type="password" class="form-control" id="pwd1" placeholder="Enter password" name="password1">  
                    </div>  
                    <div class="form-group">  
                        <label for="pwd2">Confirm Password:</label>  
                        <input type="password" class="form-control" id="pwd2" placeholder="Reenter password"  
      name="password2">  
                    </div>  
                    <button type="submit" class="btn btn-primary">Submit</button>  
                </form>  
            </div>  
        </div>  
    </div>
</body>  
</html>
  • Buat file baru acc_active_email.html dalam forlder templates/accounts
{% autoescape off %}  
Hallo {{ user.username }},  
Silahkan konfirmasi link pendaftaran di email Anda,http://{{ domain }}{% url 'activate' uidb64=uid token=token %}  
Jika ini bukan amda, silahkan abaikan email ini.  
{% endautoescape %}
  • Masukan kode ini di file urls.py di folder aplikasi
from django.urls import path  
from accounts import viewsurlpatterns = [  
        path('signup/', views.signup, name="signup"),  
        path('activate/<uidb64>/<token>/',views.activate, name='activate'),  
]
  • Buat file forms.py di folder aplikasi
from django.contrib.auth.forms import UserCreationForm  
from django.contrib.auth.models import Userclass SignUpForm(UserCreationForm):  
        class Meta:  
            model = User  
            fields = ('email', 'first_name', 'last_name', 'username')
  • Buat file tokens.py di folder aplikas. Dengan catatan perintah from django.utils import six jika menggunakan django versi 3 keatas dibuat komentar, namun jika menggunakan django versi 2 komentarnya dibuang
from django.contrib.auth.tokens import PasswordResetTokenGenerator
#from django.utils import six
class AccountActivationTokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
six.text_type(user.pk) + six.text_type(timestamp) +
six.text_type(user.is_active)
)
account_activation_token = AccountActivationTokenGenerator()
  • Masukan kode kedalam file views.py di folder aplikasi
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User
from django.contrib.auth.tokens import default_token_generator
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import EmailMessage
from django.http import HttpResponse
from django.shortcuts import render
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode

UserModel = get_user_model()
from .forms import SignUpForm
from .tokens import account_activation_token


def signup(request):
if request.method == 'GET':
return render(request, 'accounts/signup.html')
if request.method == 'POST':
form = SignUpForm(request.POST)
# print(form.errors.as_data())
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
mail_subject = 'Activate your account.'
message = render_to_string('accounts/acc_active_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': default_token_generator.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
email.send()
return HttpResponse('Please confirm your email address to complete the registration')
else:
form = SignUpForm()
return render(request, 'accounts/signup.html', {'form': form})


def activate(request, uidb64, token):
try:
uid = urlsafe_base64_decode(uidb64).decode()
user = UserModel._default_manager.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and default_token_generator.check_token(user, token):
user.is_active = True
user.save()
return HttpResponse('Thank you for your email confirmation. Now you can login your account.')
else:
return HttpResponse('Activation link is invalid!')
  • Set direktori untuk templates di file settings.py
TEMPLATES = [
    {
        'BACKEND''django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS'True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  • Silahkan buka web anda, dengan alamat <website>/signup/. maka akan tampil halaman untuk signup

  • Setelah sign up, jika kita masukan data dengan benar maka akan mengirim link aktivasi ke email.
  • Silahkan cek email lalu klik link aktivasi, dan coba login ke dalam aplikasi anda lagi.

Selamat kita sudah bisa buat aplikasi django yang mengirim email link aktivasi saat pendaftaran dalam web kita... Terima kasih semoga bermanfaat. @wawanhn

Jika ingin mendapatkan tulisan ini dalam bentuk pdf, silahkan klik disini

Referensi:


Previous Post
Next Post

0 comments: