Menu
CoddyTech

Bir Etkinliği Silme

Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 14 / 20.

Bir bağlantı bir GET isteğidir ve bir GET isteği asla verileri değiştirmemelidir. Tarayıcılar bağlantıları önceden yükler, sohbet uygulamaları önizleme oluşturmak için bağlantıları açar ve arama motorları buldukları her bağlantıyı izler. Bir etkinliği silen bağlantı, kimse buna karar vermeden etkinliği silerdi.

Bu nedenle bir değişiklik iki adımda gerçekleşir: GET isteği, bir şey isteyen sayfayı gösterir; formdaki bir düğmeyle gönderilen POST isteği ise işlemi gerçekleştirir. Bir faturayı ödenmiş olarak işaretleyen faturalandırma uygulaması:

def pay_invoice(request, pk):
    invoice = get_object_or_404(Invoice, pk=pk)
    if request.method == "POST":
        invoice.paid = True
        invoice.save()
        return redirect("bills:invoice", pk=invoice.pk)
    return render(request, "bills/confirm_pay.html", {"invoice": invoice})

Onay formunda alana gerek yoktur; yalnızca token ve bir düğme yeterlidir. action niteliği olmayan bir form, gönderiyi bulunduğu sayfaya yapar. Sildikten sonra hâlâ var olan bir sayfaya yönlendirin.

challenge icon

Görev

Kolay

Bu etkinliği sil bağlantısı ve sayfası hazır.

  1. delete_event içinde GET yalnızca sayfayı gösterir. POST etkinliği siler ve etkinlikler listesine yönlendirir.
  2. delete_event.html içinde yorumu, bu sayfaya POST isteği gönderen bir formla ve Delete düğmesiyle değiştir.

Delete düğmesine bas: ana sayfaya yönlendirilirsin ve Friday Jazz Night artık yoktur.

Kendin dene

from django.shortcuts import get_object_or_404, redirect, render

from .forms import EventForm
from .models import Event


def event_list(request):
    q = request.GET.get("q", "")
    events = Event.objects.all()
    if q:
        events = events.filter(title__icontains=q)
    return render(request, "events/event_list.html", {"events": events, "q": q})


def event_detail(request, pk):
    event = get_object_or_404(Event, pk=pk)
    return render(request, "events/event_detail.html", {"event": event})


def new_event(request):
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = form.save()
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm()
    return render(request, "events/new_event.html", {"form": form})


def edit_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        form = EventForm(request.POST, instance=event)
        if form.is_valid():
            form.save()
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm(instance=event)
    return render(request, "events/edit_event.html", {"form": form, "event": event})


def delete_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    # Etkinliği yalnızca form gönderildiğinde sil, ardından listeye geri dön.
    return render(request, "events/delete_event.html", {"event": event})

Formlar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground