Menu
CoddyTech

Herkese Açık Bir Bağlantı

Coddy'nin Django Journey'sinin Kullanıcılar ve Hesaplar bölümünün bir parçası. Ders 16 / 16.

Paylaşılan bir notun, oturum açmış olsun ya da olmasın herkesin açabileceği, yalnızca notu gösteren bir adrese ihtiyacı var. Sahibinin sayfasında Düzenle ve Sil seçenekleri bulunur; bu sayfada bulunmamalıdır.

Artık her parçayı kullandın. Daha önce yanıtladığın soruları sor: Özel bir sitede bu sayfayı kim açabilir? Hangi notları bulabilir ve diğerleri için ne yanıt verir? Sayfanın Düzenle ve Sil bağlantılarını içermemesi için hangi şablon kullanılmalı? Bir bağlantı ancak sunucu her istekte denetlediğinde güvenle paylaşılabilir.

Üç kişi olarak test et: sahibi, başka bir kullanıcı ve oturumu kapalı bir ziyaretçi.

challenge icon

Görev

Orta
  • Herkesin açabileceği, shared adlı /shared/<id>/ herkese açık sayfası. Paylaşılan notun başlığını, gövdesini ve sahibinin kullanıcı adıyla birlikte Shared by metnini gösterir.
  • Özel bir nota bu sayfadan herkes için 404 yanıtı verilir.
  • Bu sayfada Düzenle veya Sil bağlantısı yoktur.
  • Paylaşılan notun kendi sayfasında nota giden bir Share link bağlantısı bulunur.

Run düğmesine basın, oturumu kapatın ve /shared/2/ adresini açın.

Kendin dene

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})
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Kullanıcılar ve Hesaplar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground