Nama : Restu Ahmad Ar Ridho
NPM : 2206028951
Kelas : PBP - E
Django UserCreationForm
adalah sebuah form bawaan (built-in form) yang disediakan oleh Django untuk memudahkan proses pembuatan akun (registration) pada framework Django. Form ini dirancang khusus untuk mengumpulkan data yang diperlukan untuk membuat akun pengguna seperti nama pengguna (username
), kata sandi (password1
), konfirmasi kata sandi (password2
)
Kelebihan | Kekurangan |
---|---|
Sederhana dan bisa langsung dipakai dapat digunakan tanpa perlu banyak penyesuaian, sehingga bisa mempercepat dalam mengembangkan aplikasi. | Kurang fleksibel untuk memiliki kebutuhan yang sangat spesifik atau kompleks yang tidak dapat dipenuhi oleh form bawaan. |
Memiliki validasi bawaan untuk memastikan data yang dimasukkan oleh pengguna sesuai dengan persyaratan yang ditentukan. | Hanya memiliki tampilan standar yang mungkin tidak sesuai dengan desain UI khusus aplikasi. |
Memudahkan integrasi dengan sistem otentikasi Django, termasuk penyimpanan aman kata sandi. | --- |
Autentikasi (Authentication) adalah proses verifikasi identitas pengguna. Ini berarti memastikan bahwa pengguna yang mengakses aplikasi telah memberikan informasi yang sesuai untuk mengidentifikasi diri mereka, seperti username dan password. Autentikasi dilakukan saat pengguna masuk (login) ke aplikasi.
Otorisasi (Authorization) adalah proses menentukan siapa yang diizinkan atau tidak diizinkan setelah berhasil diautentikasi. Otorisasi adalah tentang mengontrol akses pengguna ke berbagai bagian atau fitur aplikasi berdasarkan hak akses yang dimilikinya. Dalam Django, otorisasi dapat diterapkan menggunakan berbagai cara, seperti decorator @login_required
yang kita gunakan.
Keduanya penting karena:
-
Autentikasi memastikan bahwa hanya pengguna yang sah yang memiliki akses ke aplikasi. Ini melindungi dari akses yang tidak sah atau penyalahgunaan oleh pengguna yang tidak berwenang.
-
Otorisasi mengontrol apa yang dapat dilakukan oleh pengguna yang telah diautentikasi. Ini memastikan bahwa pengguna hanya dapat mengakses bagian dari aplikasi yang sesuai dengan hak akses yang dimilikinya, dan mencegah penggunaan yang tidak sah terhadap fitur atau data tertentu.
Apa Itu Cookies dalam Konteks Aplikasi Web, dan Bagaimana Django Menggunakan Cookies untuk Mengelola Data Sesi Pengguna?
Cookies adalah istilah untuk kumpulan informasi yang berisi history dan aktivitas pengguna saat menelusuri sebuah website. Secara sederhana pengertian cookies adalah kumpulan data yang diterima dan disimpan di peramban web pengguna dari sebuah situs dan mengirimkan kembali ke situs yang dikunjungi. Cookies biasanya digunakan oleh aplikasi web untuk menyimpan informasi yang dapat digunakan di masa mendatang.
Django menggunakan cookies untuk mengelola data sesi pengguna. Ketika seorang pengguna masuk (login) ke aplikasi web Django, sebuah cookie unik disimpan. Cookie ini berisi informasi yang mengidentifikasi sesi pengguna, seperti keadaan masuk (login state) dan pengaturan sesi. Pada Django dapat menggunakan seperti request.COOKIES
atau request.session
. Django menyediakan alat bawaan (built-in tools) untuk mengelola cookies dan data sesi pengguna dengan mudah.
Apakah Penggunaan Cookies Aman Secara Default dalam Pengembangan Web, atau Apakah Ada Risiko Potensial yang Harus Diwaspadai?
Penggunaan cookies dalam pengembangan web memiliki sejumlah risiko yang perlu diwaspadai. Meskipun cookies adalah alat yang berguna untuk menyimpan data, mereka juga memiliki potensi masalah keamanan jika tidak dikelola dengan benar.
Berikut adalah beberapa risiko potensial yang harus diwaspadai:
- Pencurian Data: Cookies dapat menjadi target pencurian oleh pihak yang tidak berwenang. Jika cookies mengandung data sensitif seperti token otentikasi, identifikasi pengguna, atau informasi pribadi, pencurian cookies dapat memberikan akses ilegal ke akun pengguna.
- Cookie Spoofing: Serangan cookie spoofing dapat terjadi jika pihak yang tidak berwenang mencoba memanipulasi atau memalsukan cookies. Ini dapat mengakibatkan penggunaan yang tidak sah terhadap akun pengguna.
- Pelacakan Penggunaan: Cookies sering digunakan untuk melacak perilaku dan aktivitas pengguna di seluruh berbagai situs web. Sementara ini dapat membantu dalam analitik web, juga menimbulkan kekhawatiran privasi pengguna.
- Cookies Klikjacking: Teknik klikjacking dapat digunakan untuk memaksa pengguna untuk melakukan tindakan yang tidak mereka sadari dengan memanipulasi elemen yang dapat di-klik di halaman web, termasuk cookies. Hal ini dapat mengarah ke tindakan yang tidak diinginkan atau penyalahgunaan
- Kebocoran Informasi: Jika cookies tidak dienkripsi dengan benar, informasi yang disimpan di dalamnya dapat bocor jika penggunaan protokol yang tidak aman. Hal ini dapat mengakibatkan pengungkapan data sensitif.
- Membuat template untuk menampilkan form untuk melakukan register dengan membuat berkas baru dengan nama
register.html
pada direktorimain/templates
dan disesuaikan dengan kebutuhan. - Membuka
views.py
pada direktorimain
dan menambahkan beberapa import yang diperlukan dan membuat fungsi dengan namaregister
dengan kode... from django.shortcuts import render, redirect from django.contrib.auth.forms import UserCreationForm from django.contrib import messages ... ... def register(request): form = UserCreationForm() if request.method == "POST": form = UserCreationForm(request.POST) if form.is_valid(): form.save() messages.success(request, 'Your account has been successfully created!') return redirect('main:login') context = {'form':form} return render(request, 'register.html', context) ...
- Melakukan routing untuk menampilkan template yang sudah dibuat dengan membuka berkas
urls.py
pada direktorimain
dengan menambah kode import dan routing-nya... from main.views import show_main, show_landing_page, create_book, show_xml, show_json, show_xml_by_id, show_json_by_id, register ... urlpatterns = [ ... path('register/', register, name='register'), ... ]
- Membuat template untuk menampilkan form untuk melakukan login dengan membuat berkas baru dengan nama
login.html
pada direktorimain/templates
dan disesuaikan dengan kebutuhan. - Membuka
views.py
pada direktorimain
untuk menambahkan fungsi untuk login dan menambahkan retriksi terhadap akses halamanmain
dengan menambahkan kode... from django.contrib.auth import authenticate, login from django.contrib.auth.decorators import login_required ... def login_user(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) response = HttpResponseRedirect(reverse("main:show_main")) return response else: messages.info(request, 'Sorry, incorrect username or password. Please try again.') return render(request, 'login.html') ... @login_required(login_url='/login') def show_main(request): ...
- Melakukan routing untuk menampilkan login dengan membuka berkas
urls.py
pada direktorimain
dengan menambah kode import dan routing-nya... from main.views import show_main, show_landing_page, create_book, show_xml, show_json, show_xml_by_id, show_json_by_id, register, login_user ... urlpatterns = [ ... path('login/', login_user, name='login'), ... ]
- Membuat button tambahan pada navigasi pada setiap berkas
templates
yang perlu ditambahkan seperti padamain.html
jugaindex.html
dantambah_buku.html
ketika user sudah melakukan login dengan link yang sesuai dengan routing - Membuka
views.py
pada direktorimain
untuk menambahkan fungsi untuk logout dengan menambahkan kode... from django.contrib.auth import logout ... def logout_user(request): logout(request) return redirect('main:login') ...
- elakukan routing untuk dapat melakukan fungsi pada
views.py
dengan baik dengan menambahkan kode... from main.views import show_main, show_landing_page, create_book, show_xml, show_json, show_xml_by_id, show_json_by_id, register, login_user, logout_user ... urlpatterns = [ ... path('logout/', logout_user, name='logout'), ... ]
- Melakukan pembersihan database sebelumnya dengan menjalankan
python manage.py flush
dengancmd
pada root direktori. - Menjalankan virtual environment terlebih dahulu dan menyalakan aplikasi dengan
python manage.py runserver
. - Melakukan registrasi pada url
http://127.0.0.1:8000/register
sebanyak dua kali untuk mendapatkan dua akun yang akan digunakan untuk menambahkan dummy data - Pada masing-masing akun dilakukan login pada url
http://127.0.0.1:8000/login
dan melakukan tambah buku pada urlhttp://127.0.0.1:8000/tambah_buku
sebanyak tiga kali.
- Membuka
models.py
pada direktorimain
dan menambahkan kode untuk mengimpor modelUser
... from django.contrib.auth.models import User ...
- Pada model
Item
yang sudah dibuat tambahkan fielduser
untuk mendapatkan relasi antar user dan item yang dimilikinya dengan menambahkan kodeclass Item(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) ...
- Buka
views.py
pada direktorimain
ubah kode pada fungsicreate_book
agar setiap buku yang ditambahkan sesuai dengan user yang sedang login dengan kode... def create_book(request): form = ItemForm(request.POST or None) if form.is_valid() and request.method == "POST": item = form.save(commit=False) item.user = request.user item.save() request.session["new_item"] = request.POST return HttpResponseRedirect(reverse('main:show_main')) return render(request, "tambah_buku.html") ...
- Mengubah fungsi
show_main
agar hanya menampilkan item yang sesuai dengan kodedef show_main(request): Items = Item.objects.filter(user=request.user) new_item = request.session.get('new_item', None) if 'new_item' in request.session: del request.session["new_item"] context = { 'name': request.user.username, 'data' : Items, 'new_item' : new_item } return render(request, "main.html", context)
-
Membuat tempat tambahan pada templates untuk menampilkan siapa yang sedang login dan last login dengan melakukan conditional rendering dengan mengambil
cookies
yang disimpan. -
Menyimpan siapa yang sedang login dan last login pada berkas
views.py
pada direktorimain
dengan menambahkan kode pada fungsilogin_user
.... if user is not None: login(request, user) response = HttpResponseRedirect(reverse("main:show_main")) response.set_cookie('user', user) response.set_cookie('last_login', str(datetime.datetime.now().strftime('%d-%m-%Y %H:%M'))) return response ...
-
Pada fungsi
show_landing_page
danshow_main
ditambahkan variabel untuk menampilkan pada template dalam variabelcontext
dengan kode.def show_landing_page: user = request.COOKIES.get('user', None) context = { 'name': 'Restu Ahmad Ar Ridho', # Nama kamu 'class': 'PBP E', # Kelas PBP kamu 'user' : user, } @login_required(login_url='/login') def show_main(request): Items = Item.objects.filter(user=request.user) new_item = request.session.get('new_item', None) if 'new_item' in request.session: del request.session["new_item"] context = { 'name': request.user.username, 'data' : Items, 'new_item' : new_item, 'last_login': request.COOKIES['last_login'], 'user' : request.COOKIES['user'] } return render(request, "main.html", context)
-
Kemudian pada fungsi
logout_user
ditambahkan kode untuk menghapus cookies user yang login dengan menambahkan kodedef logout_user(request): logout(request) response = HttpResponseRedirect(reverse('main:show_landing_page')) response.delete_cookie('last_login') response.delete_cookie('user') return response
Pada aplikasi yang sudah dibuat tersebut sudah menerapkan fitur:
- Tombol dan fungsi untuk menambahkan amount suatu objek sebanyak satu dan tombol untuk mengurangi jumlah stok suatu objek sebanyak satu.
- Tambahkan tombol dan fungsi untuk menghapus suatu objek dari inventori.