Tautan Publik
Termasuk bagian Pengguna dan Akun dalam perjalanan Django di Coddy. Pelajaran 16 dari 16.
Catatan yang dibagikan memerlukan alamat yang bisa dibuka siapa saja, baik sudah login maupun belum, yang menampilkan catatan itu saja. Halaman pemilik memiliki tombol Edit dan Delete, halaman ini tidak boleh memilikinya.
Kamu sudah menggunakan semua bagian ini. Ajukan pertanyaan yang sudah kamu jawab sebelumnya: di situs privat, siapa yang boleh membuka halaman ini? Catatan mana yang boleh ditemukan, dan apa responsnya untuk catatan lainnya? Template mana yang harus digunakan agar halaman ini tidak bisa menautkan ke Edit dan Delete? Tautan hanya aman untuk dibagikan jika server memeriksanya di setiap permintaan.
Uji halaman ini sebagai tiga orang: pemilik, pengguna lain, dan pengunjung yang sudah logout.
Tantangan
Sedang- Halaman publik di
/shared/<id>/, bernamashared, yang bisa dibuka siapa saja. Halaman ini menampilkan judul dan isi catatan yang dibagikan, sertaShared bydengan nama pengguna pemiliknya. - Catatan pribadi menampilkan 404 di halaman tersebut untuk siapa pun.
- Tidak ada tautan Edit atau Delete di halaman itu.
- Di halaman catatan yang dibagikan, terdapat tautan
Share linkke halaman tersebut.
Tekan Jalankan, keluar, lalu buka /shared/2/.
Coba sendiri
from django.contrib.auth import login
from django.contrib.auth.decorators import login_not_required, permission_required
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
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.filter(owner=request.user)
return render(request, "notes/note_list.html", {"notes": notes})
def note_detail(request, pk):
note = get_object_or_404(Note, pk=pk, owner=request.user)
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, owner=request.user)
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, owner=request.user)
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})
def stats(request):
if not request.user.is_staff:
raise PermissionDenied
context = {"user_count": User.objects.count(), "note_count": Note.objects.count()}
return render(request, "notes/stats.html", context)
@permission_required("notes.view_note", raise_exception=True)
def all_notes(request):
notes = Note.objects.select_related("owner")
return render(request, "notes/all_notes.html", {"notes": notes})
def profile(request):
note_count = request.user.notes.count()
return render(request, "notes/profile.html", {"note_count": note_count})
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengguna dan Akun
Latihan sendiri: Playground Django