8 වන ඒකකය: User Dashboard - පරිශීලකයාට riêng දත්ත
දැනට අපේ යෙදුමේ තියෙන ප්රධානම අඩුපාඩුවක් තමයි, කවුරු login වුණත් හැමෝගෙම සටහන් එකට පේන එක. මේක හරිම අවුල් සහගතයි. අපි මේ ඒකකයේදී, ලොග් වූ පරිශීලකයාට **ඔහුගේ සටහන් පමණක්** පෙනෙන ලෙස සකස් කරමු.
පියවර 1: Views ආරක්ෂා කිරීම (`@login_required`)
හිතන්න, ඔයාගේ ගෙදරට ඇතුල්වෙන්න ප්රධාන දොරක් තියෙනවා. ඒ දොරට "අගුලක්" දානවා වගේ තමයි `@login_required` කියන්නේ. මේ අගුල දැම්මට පස්සේ, යතුර (login credentials) තියෙන අයට විතරයි ඇතුලට එන්න පුළුවන්. නැති අයව Django ඉබේම login පිටුවට හරවලා යවනවා.
අපි දැන් `notes_list` සහ `Notes` කියන views දෙකටම මේ ආරක්ෂාව සපයමු. `notes/views.py` ගොනුවට ගොස් පහත වෙනස්කම් කරන්න.
# notes/views.py
from django.shortcuts import render, redirect
from .models import Note
from .forms import NoteForm
from django.contrib.auth.decorators import login_required # 1. මෙය import කරගන්න
# ...
@login_required # 2. decorator එක එකතු කරන්න
def notes_list(request):
# ...
return render(request, 'notes_list.html', context)
@login_required # 3. decorator එක එකතු කරන්න
def create_note(request):
# ...
return render(request, 'note_form.html', context)
පියවර 2: සටහන් Filter කිරීම (ලොග් වූ පරිශීලකයාට අනුව)
දැන් අපි `notes_list` view එක වෙනස් කරලා, database එකෙන් සියලුම සටහන් ගන්නවා වෙනුවට, දැනට ලොග් වී සිටින පරිශීලකයාට (`request.user`) අදාළ සටහන් පමණක් ගන්නා ලෙස සකස් කරමු.
# notes/views.py
@login_required
def notes_list(request):
# Note.objects.all() වෙනුවට පහත කේතය යොදන්න
notes = Note.objects.filter(user=request.user) # logged-in user ට අදාළ සටහන් පමණක් filter කරන්න
context = {
'notes': notes
}
return render(request, 'notes_list.html', context)
පියවර 3: නව සටහනක් පරිශීලකයාට සම්බන්ධ කිරීම
අලුතින් සටහනක් හදද්දී, ඒක හදන්නේ කවුද කියලා අපි Django වලට කියන්න ඕන. ඒ සඳහා, form එක save කරන්න කලින්, ඒ note object එකේ `user` කියන field එකට දැනට ලොග් වී සිටින user ව (`request.user`) සම්බන්ධ කරමු.
`Notes` view එක පහත පරිදි වෙනස් කරන්න.
# notes/views.py
@login_required
def create_note(request):
if request.method == 'POST':
form = NoteForm(request.POST)
if form.is_valid():
# form.save() එක කෙලින්ම කරන්න එපා
note = form.save(commit=False) # 1. database එකේ save නොකර object එකක් විතරක් හදාගන්න
note.user = request.user # 2. ඒ object එකේ user ට logged-in user ව සම්බන්ධ කරන්න
note.save() # 3. දැන් object එක database එකේ save කරන්න
return redirect('notes-list')
else:
form = NoteForm()
context = {'form': form}
return render(request, 'note_form.html', context)
දැන් පරීක්ෂා කර බලන්න!
Superuser ගිණුමෙන් logout වී, Django Admin Panel එක හරහා අලුත් පරිශීලක ගිණුම් එකක් හෝ දෙකක් සාදාගන්න. ඉන්පසු, එක් එක් ගිණුමෙන් login වී සටහන් කිහිපයක් ඇතුළත් කර බලන්න. එක් පරිශීලකයෙකුට අනෙක් පරිශීලකයාගේ සටහන් නොපෙන්වන බව ඔබට තහවුරු කරගත හැකිවේවි!
Superuser ගිණුමෙන් logout වී, Django Admin Panel එක හරහා අලුත් පරිශීලක ගිණුම් එකක් හෝ දෙකක් සාදාගන්න. ඉන්පසු, එක් එක් ගිණුමෙන් login වී සටහන් කිහිපයක් ඇතුළත් කර බලන්න. එක් පරිශීලකයෙකුට අනෙක් පරිශීලකයාගේ සටහන් නොපෙන්වන බව ඔබට තහවුරු කරගත හැකිවේවි!