Bir Etkinliği Silme
Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 14 / 20.
Bağlantı bir GET isteğidir ve GET isteği verileri asla değiştirmemelidir. Tarayıcılar bağlantıları önceden yükler, sohbet uygulamaları önizleme göstermek 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, onay isteyen bir sayfa gösterir; formdaki bir düğmeyle gönderilen POST isteği ise işlemi gerçekleştirir. Bir faturayı ödendi 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 belirteç ve bir düğme yeterlidir. action niteliği olmayan bir form, bulunduğu sayfaya POST isteği gönderir. Bir satırın .delete() yöntemi onu siler. Sildikten sonra hâlâ var olan bir sayfaya yönlendirin.
Görev
KolayBu etkinliği sil bağlantısı ve sayfası hazır:
delete_eventiçinde GET yalnızca sayfayı gösterir. POST etkinliği siler ve etkinlikler listesine yönlendirir.delete_event.htmliçinde, bu sayfaya POST isteği gönderen veDeletedüğmesi içeren bir form ekle.
Çalıştır'a bas, bir etkinlik aç ve onu sil.
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