Menu
CoddyTech

רק הפתקים שלי

חלק מהיחידה משתמשים וחשבונות במסלול ה-Django של Coddy. שיעור 9 מתוך 16.

לכל פתק יש בעלים, אבל הרשימה עדיין מציגה את Note.objects.all(): ada קוראת את היומן של bob. הרשימה צריכה להציג רק את הפתקים של מי שמבקש אותם.

מסננים לפי ForeignKey באמצעות אובייקט, ולא באמצעות שם. אתר של ספרייה מציג את הספרים של מחבר אחד:

author = Author.objects.get(name="Ursula K. Le Guin")
books = Book.objects.filter(author=author)

Django משווה את המזהה של המחבר. העברת השם, filter(author="Ursula K. Le Guin"), נכשלת עם ValueError.

כשהשורה שצריך להשוות אליה שייכת למבקר, אין צורך לחפש אף אחד: Django כבר הציב את המשתמש המחובר בכל בקשה, כאובייקט, מתוך ההפעלה. לעולם אל תיקחו את המשתמש מכתובת URL או משדה בטופס, כי כל אחד יכול לשנות אותם.

challenge icon

אתגר

קל

ב־note_list, יש להציג רק את ההערות של המשתמש המחובר.

לחצו על Run והתחברו בתור ada, לאחר מכן התנתקו והתחברו בתור bob (שניהם משתמשים ב־coddy-pass-123). כל אחד רואה רק את ההערות שלו.

נסו בעצמכם

from django.contrib.auth import login
from django.contrib.auth.decorators import login_not_required
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import get_object_or_404, redirect, render

from .forms import NoteForm
from .models import Note


def note_list(request):
    notes = Note.objects.all()
    return render(request, "notes/note_list.html", {"notes": notes})


def note_detail(request, pk):
    note = get_object_or_404(Note, pk=pk)
    return render(request, "notes/note_detail.html", {"note": note})


def note_create(request):
    if request.method == "POST":
        form = NoteForm(request.POST)
        if form.is_valid():
            note = form.save(commit=False)
            note.owner = request.user
            note.save()
            return redirect("notes:detail", pk=note.pk)
    else:
        form = NoteForm()
    return render(request, "notes/note_form.html", {"form": form})


def note_edit(request, pk):
    note = get_object_or_404(Note, pk=pk)
    if request.method == "POST":
        form = NoteForm(request.POST, instance=note)
        if form.is_valid():
            form.save()
            return redirect("notes:detail", pk=note.pk)
    else:
        form = NoteForm(instance=note)
    return render(request, "notes/note_form.html", {"form": form, "note": note})


def note_delete(request, pk):
    note = get_object_or_404(Note, pk=pk)
    if request.method == "POST":
        note.delete()
        return redirect("notes:list")
    return render(request, "notes/note_confirm_delete.html", {"note": note})


@login_not_required
def signup(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect("notes:list")
    else:
        form = UserCreationForm()
    return render(request, "notes/signup.html", {"form": form})
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה משתמשים וחשבונות

תרגלו בעצמכם: Django אונליין