Menu
CoddyTech

Solo le mie note

Fa parte della sezione Utenti e account del percorso Django di Coddy. Lezione 9 di 16.

Ogni nota ha un proprietario, ma l’elenco mostra ancora Note.objects.all(): ada legge il diario di bob. L’elenco dovrebbe mostrare solo le note di chi le sta visualizzando.

Filtri una ForeignKey usando un oggetto, non un nome. Il sito di una biblioteca elenca i libri di un autore:

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

Django confronta l’id dell’autore. Passare il nome, filter(author="Ursula K. Le Guin"), genera un ValueError. Per confrontare il nome dell’autore, aggiungi due caratteri di sottolineatura alla chiave: filter(author__name="Ursula K. Le Guin").

In questo caso, l’oggetto da usare per il confronto è il visitatore, quindi non c’è nessuno da cercare. Django inserisce già l’utente che ha effettuato l’accesso in ogni richiesta. Non prendere mai l’utente dall’URL o da un campo del modulo, perché chiunque può modificarli.

challenge icon

Sfida

Facile

In note_list, elenca solo le note dell'utente che ha effettuato l'accesso.

Accedi come ada (password coddy-pass-123): l'elenco mostra Shopping list e Ideas, non Bob's diary.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Utenti e account

Esercitati da solo: Playground Django