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 sta effettuando la richiesta.
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"), causa un ValueError.
Quando la riga da confrontare corrisponde al visitatore, non c'è nessuno da cercare: Django ha già inserito l'utente autenticato in ogni richiesta, come oggetto, tramite la sessione. Non prendere mai l'utente dall'URL o da un campo del modulo, che chiunque può modificare.
Sfida
FacileIn note_list, elenca solo le note dell'utente che ha effettuato l'accesso.
Premi Esegui e accedi come ada, poi esci e accedi come bob (entrambi usano coddy-pass-123). Ognuno vede solo le proprie note.
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})
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Utenti e account
3I tuoi dati
Una nota ha un proprietarioSolo le mie noteEsercitati da solo: Playground Django