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.
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 yorumu, bu sayfaya POST isteği gönderen bir formla veDeletedüğ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