๐Ÿ’ก Ikuti kami untuk mendapatkan update menarik lainnya Follow Now!

Membuat Register, Login dan Logout menggunakan Django

AVvXsEi04ddi66xdtDO_SP9hmZEZ1tv8ULe6ZtpBjVsbUeR1Tr3plzQzFt7crR15iHF_YSWKSVzmQXYcsp4z6VMEMoasMZYhkH7XbRyzxY1nYEio8yqJFgICL3hySHACQ0-PFZaVmQuAxFEtZreajsTKKeM8bjk5O_GCqakZAqhroJMUeCwo_raLxRtHvphf

Hallo guys, pada kesempatan kali ini kita akan belajar cara membuat User Register, Login, dan Logout mengunakan modul yang telah tersedia pada Framework Django, yuk simak artikel nya sampai selesai agar kalian paham.

Sebelum mulai saya akan mengenggap kalian telah paham menggunakan Framework django, jadi tutorial kali ini tidak akan membuat project dari awal hanya fokus kepada topik kita yaitu Register, Login, dan Logout.

Pertama seperti biasa buatlah terlebih dahulu Project kalian, disini saya menamakan project nya dengan nama myweb dan app dengan nama account.


User Registration

Django hadir dengan form Register built-in. Kalian hanya perlu mengonfigurasinya sesuai kebutuhan kalian (yaitu mengumpulkan alamat email saat pendaftaran).

Membuat Form Register

Buatlah sebuah file form.py baru

├── env/
├── myweb/
└── account/
    └── (file baru)forms.py
Kemudian masukan lah kode berikut:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


# Create your forms here.

class NewUserForm(UserCreationForm):
        email = forms.EmailField(required=True)

        class Meta:
                model = User
                fields = ("username", "email", "password1", "password2")

        def save(self, commit=True):
                user = super(NewUserForm, self).save(commit=False)
                user.email = self.cleaned_data['email']
                if commit:
                        user.save()
                return user
Django dilengkapi dengan form register yang disebut UserCreationForm. Namun, UserCreationForm hanya tersedia username dan kata sandi (kata sandi1 adalah kata sandi awal dan kata sandi2 adalah konfirmasi kata sandi). 

Untuk menyesuaikan formulir bawaan, pertama-tama buat file baru yang disebut forms.py di direktori aplikasi.  File baru ini dibuat di direktori yang sama dengan models.py dan views.py.  
Kemudian panggil UserCreationForm dalam kelas baru yang disebut NewUserForm dan tambahkan field lain yang disebut email.

Simpan email ke pengguna.  Tambahkan field yang ingin ditambahkan sesuai kebutuhan ke UserCreationForm.

Membuat Template register.html

├── myweb/ 
├── account/
└── templates/
    ├── account/
    └── (File baru) register.html
{% extends "base.html" %}

{% block body %} 

       

<!--Register--> 
<div class="container">
        <h1>Register</h1>
        <form method="POST">
                {% csrf_token %}
                {{ register_form.as_p}}                    
                <button class="btn btn-primary" type="submit">Register</button>
        </form>
        <p class="text-center">If you already have an account, <a href="{% url 'accounut:login' %}">login</a> instead.</p>
</div>

{% endblock %}
Selanjutnya, buat template HTML untuk formulir register. disini saya akan membuat dengan nama register.html.

Tambahkan URL register ke apps


├── myweb/
└── account/
    └── urls.py
from django.urls import path
from . import views

app_name = "account"   


urlpatterns = [    
path("", views.index, name="index")
path("register", views.register_request, name="register")
]
Sekarang, tambahkan url register ke dalam file urls.py, url register akan memanggil fungsi views.register, jadi kalian harus menambahkan fungsi register ke dalam file views.py.

Menambahkan fungsi register kedalam Views


├── myweb/
└── account/
    └── views.py
from django.shortcuts import  render, redirect
from .forms import NewUserForm
from django.contrib.auth import login
from django.contrib import messages

def register_request(request):
        if request.method == "POST":
                form = NewUserForm(request.POST)
                if form.is_valid():
                        user = form.save()
                        login(request, user)
                        messages.success(request, "Pendaftaran berhasil." )
                        return redirect("account:index")
                messages.error(request, "Pendaftaran gagal.")
        form = NewUserForm()
        return render (request=request, template_name="account/register.html", context={"register_form":form})
Impor NewUserForm dari forms.py dan login dari Django.contrib.auth. Kemudian tulis fungsi views baru yang diberi nama register_request.

Ada dua pernyataan if/else dalal fungsi tersebut. Pernyataan if pertama untuk melihat apakah formulir menggunakan metode POST sementara pernyataan kedua untuk melihat apakah formulir itu valid. Jika keduanya Benar, maka informasi formulir disimpan di di dalam database User,kemudian user login, dan user akan diarahkan ke beranda yang menampilkan pesan sukses.

Else, jika formulir tidak valid, pesan error ditampilkan. Tetapi jika permintaan tersebut GET, yang berarti pernyataan if pertama mengembalikan False, render formulir kosong pada template register.

Test register user

Jika selesai saatnya untuk menguji apakah code yang kalian buat benar atau tidak, dengan cara.
Membuka URL register, http://127.0.0.1:8000/account/register, di jendela browser Anda.
Cobalah untuk mendaftarkan akun.
Jika dilakukan dengan benar, Anda akan diarahkan ke beranda yang menampilkan pesan sukses 'Pendaftaran berhasil'.

Sekarang mari kita periksa informasi User yang telah di daftarkan dalam administrasi Django.

Membuat superuser

Bukalah terminal/CMD lalu masuk ke virtual environment.
(env) C:\Users\Owner\Desktop\Code\myweb>python manage.py createsuperuser
Username (leave blank to use 'owner'): owner
Email address: 
Password: *****
Password (again): *****
Superuser created successfully.

(env) C:\Users\Owner\Desktop\Code\env\mysite>python manage.py runserver
Jika kelian belum melakukannya, buat akun superuser untuk mendapatkan akses ke administrasi Django. kemudian kalian akan memeriksa apakah pengguna telah ditambahkan dengan benar ke database.

Jalankan perintah python manage.py createsuperuser di Windows Command Prompt atau python3 manage.py createsuperuser di Terminal. Kemudian isi username dan password.

Mengecek apakah user telah terdaftar di Django admin

Pergi ke URL http://127.0.0.1:8000/admin/ di mana Anda akan melihat login administrasi Django.

Masuk ke admin dengan akun superuser Anda lalu klik 'User'. Di sana Kalian akan melihat daftar semua nama pengguna dan email bersama dengan status staf mereka.



User Login

Sekarang kalian mungkin memperhatikan fungsi views yang telah kalian buat secara otomatis memasukkan user setelah pembuatan akun. Sekarang kalian ingin user memiliki kemampuan untuk login secara bebas. Jadi kalain membutuhkan template login, URL, dan fungsi views.

Membuat template login.html


├── myweb/ 
├── account/
└── templates/
    ├── account/
    └── (File baru) login.html
{% extends "base.html" %}

{% block body %}      


<!--Login--> 
<div class="container">
  <h1>Login</h1>
  <form method="POST">
    {% csrf_token %}
    {{ login_form.as_p }}
    <button class="btn btn-primary" type="submit">Login</button>
  </form>
  <p class="text-center">Don't have an account? <a href="{% url 'account:register' %}">Create an account</a>.</p>
</div>

{% endblock %}
Cara membuatnya, hampir sama dengan template register yang membedakanya hanya pada url dan tombol di bawah form.

Menambahkan login URL ke apps


├── myweb/
└── account/
    └── urls.py
from django.urls import path
from . import views

app_name = "account"   


urlpatterns = [
    path("", views.index, name="index"),
    path("register", views.register_request, name="register"),
    path("login", views.login_request, name="login")
]
Tambahkan path url login ke dalam file urls

Menambahkan fungsi Login ke dalam views


├── myweb/
└── account/
    └── views.py
from django.shortcuts import  render, redirect
from .forms import NewUserForm
from django.contrib.auth import login, authenticate #tambah ini
from django.contrib import messages
from django.contrib.auth.forms import AuthenticationForm #tambah ini

def register_request(request):
        ...

def login_request(request):
        if request.method == "POST":
                form = AuthenticationForm(request, data=request.POST)
                if form.is_valid():
                        username = form.cleaned_data.get('username')
                        password = form.cleaned_data.get('password')
                        user = authenticate(username=username, password=password)
                        if user is not None:
                                login(request, user)
                                messages.info(request, f"Kamu sekarang login sebagai {username}.")
                                return redirect("main:homepage")
                        else:
                                messages.error(request,"Invalid username or password.")
                else:
                        messages.error(request,"Invalid username or password.")
        form = AuthenticationForm()
        return render(request=request, template_name="account/login.html", context={"login_form":form})
Sekarang kembali ke views.py dan tambahkan authenticate ke daftar import django.contrib.auth kemudian import AuthenticationForm dari django.contrib.auth.forms di bagian atas file.

AuthenticationForm adalah formulir Django yang dibuat untuk masuk ke user.

Untuk menulis fungsi login kalian, tambahkan pernyataan if/else yang menggunakan fungsi Django authenticate(). Fungsi ini digunakan untuk memverifikasi kredensial pengguna (username dan kata sandi) dan mengembalikan objek user yang disimpan di backend.

Jika backend mengautentikasi kredensial, fungsi akan menjalankan Django login() untuk masuk ke pengguna yang diautentikasi. (else if) jika pengguna tidak diautentikasi, itu mennampilkan pesan kepada user "Invalid username or password.".

Pernyataan else yang kedua adalah jika formulir tidak valid, maka ia mengembalikan pesan kesalahan yang sama.

Pernyataan else terakhir adalah jika permintaan bukan POST, maka kembalikan formulir kosong di template HTML login.

Test User login

Sekarang buka URL login,http://127.0.0.1:8000/login, dan login ke akun yang telah didaftarkan.

Anda akan mendapatkan pesan sukses dan masuk jika Anda memasukkan nama pengguna dan kata sandi yang benar.

User Logout

Hal terakhir yang perlu kalian buat adalah logout user. kalian akan menempatkan link logout di navbar tetapi hanya akan terlihat oleh user jika mereka diautentikasi (yaitu mereka yang telah login).
<!--Navbar-->
<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="False" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarText">
    <ul class="navbar-nav mr-auto">
      {% if user.is_authenticated %}
      
      <li class="nav-item">
        <a class="nav-link" href="{% url 'account:logout' %}">Logout</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Welcome, {{user.username}}</a>
      </li>

      {% else %}

      <li class="nav-item">
        <a class="nav-link" href="{% url 'account:login' %}">Login</a>
      </li>

      {% endif %}
    </ul>
  </div>
</nav>
Variabel template Django {{ user }} menyimpan informasi user yang masuk saat ini dan izinnya tersedia dalam konteks template.

Yang perlu kita lakukan adalah menambahkan pernyataan if/else bahwa jika user diautentikasi, tampilkan link logout dan nama pengguna mereka, jika tidak, tampilkan link login.

Menambahkan Logout URL ke apps

from django.urls import path
from . import views

app_name = "account"   


urlpatterns = [
    path("", views.homepage, name="homepage"),
    path("register", views.register_request, name="register"),
    path("login", views.login_request, name="login"),
    path("logout", views.logout_request, name= "logout"),
]
Tambahkan url logout di file urls.py.

Menambahkan fungsi Logout ke views

├── myweb/
└── account/
    └── views.py
from django.shortcuts import  render, redirect
from .forms import NewUserForm
from django.contrib.auth import login, authenticate, logout #tambahkan ini
from django.contrib import messages
from django.contrib.auth.forms import AuthenticationForm

def register_request(request):
        ...

def login_request(request):
        ...

def logout_request(request):
        logout(request)
        messages.info(request, "Berhasil Logout.") 
        return redirect("account:index")

Terakhir, tambahkan fungsi logout ke file views. Fungsi logout_request menggunakan fungsi Django logout() untuk mengeluarkan user dari akun mereka dan mengarahkan mereka ke beranda saat URL logout diminta.

Test User Logout

Buka jendela browser dan muat ulang halaman.

login kembali jika perlu.

Seharusnya ada bilah navigasi dengan tautan logout di sebelah teks sambutan pengguna. 

Klik link Logout dan beranda akan memuat ulang yang tadinta menampilkan link logout  akan berubah menjadi link login.

Sekian dulu artikel kali ini semoga bermanfaat terimakasih ๐Ÿ˜.

Baca juga :

About the Author

Need more coffee ☕, If you want to support me to pay domain, you can donate via Donate or Trakteer

1 komentar

  1. Wah lengkap yah, sampe logout juga ada
Komentar blog
Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.