קישור ציבורי
חלק מהיחידה משתמשים וחשבונות במסלול ה-Django של Coddy. שיעור 16 מתוך 16.
הערה משותפת צריכה כתובת שכל אחד יכול לפתוח, בין שהוא מחובר ובין שלא, ולהציג רק את ההערה. בעמוד של הבעלים יש אפשרויות עריכה ומחיקה; בעמוד הזה הן לא צריכות להופיע.
כבר השתמשת בכל אחד מהחלקים. העמוד צריך להחליט על שלושה דברים: מי רשאי לפתוח אותו, אילו הערות הוא יכול למצוא, ובאיזו תבנית הוא משתמש.
בדוק אותו בתור שלושה אנשים: הבעלים, משתמש אחר ומבקר שאינו מחובר.
אתגר
בינוניהעניקו להערות משותפות דף ציבורי.
- ב־
notes/urls.py, הוסיפו אתshared/<int:pk>/בשםsharedעבורshared_note. - ב־
notes/views.py, כתבו אתshared_noteעם@login_not_required. היא מוצאת רק הערות משותפות; כל הערה אחרת מחזירה 404. - רנדרו את
notes/shared_note.html: כותרת, גוף ההערה והבעלים, ללא קישורי עריכה או מחיקה. - ב־
note_detail.html, בחלק של ההערה המשותפת, קשרו אתShare linkאלnotes:shared.
התנתקו ופתחו את /shared/2/: Pancakes מוצגת, ו־/shared/1/ מחזירה 404.
נסו בעצמכם
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})
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה משתמשים וחשבונות
תרגלו בעצמכם: Django אונליין