Menu
CoddyTech

Usuwanie wydarzenia

Część sekcji Formularze ścieżki Django w Coddy. Lekcja 14 z 20.

Link to żądanie GET, a żądanie GET nigdy nie może zmieniać danych. Przeglądarki wczytują linki z wyprzedzeniem, aplikacje czatowe otwierają je, aby wyświetlić podgląd, a wyszukiwarki odwiedzają każdy znaleziony link. Link, który usuwałby wydarzenie, usunąłby je bez niczyjej decyzji.

Dlatego zmiana przebiega w dwóch krokach: żądanie GET wyświetla stronę z prośbą o potwierdzenie, a żądanie POST, wysłane przez przycisk w formularzu, wykonuje działanie. Aplikacja rozliczeniowa, która oznacza fakturę jako opłaconą:

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})

Formularz potwierdzający nie potrzebuje żadnych pól, tylko tokenu i przycisku; formularz bez action wysyła żądanie POST na stronę, na której się znajduje. Metoda .delete() usuwa wiersz. Po usunięciu przekieruj na stronę, która nadal istnieje.

challenge icon

Wyzwanie

Łatwy

Link Usuń to wydarzenie i jego strona są gotowe:

  • W delete_event żądanie GET tylko wyświetla stronę. Żądanie POST usuwa wydarzenie i przekierowuje do listy wydarzeń.
  • W delete_event.html dodaj formularz wysyłany na tę stronę z przyciskiem Delete.

Naciśnij Run, otwórz wydarzenie i usuń je.

Spróbuj swoich sił

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)
    # Usuń wydarzenie dopiero po przesłaniu formularza, a następnie wróć do listy.
    return render(request, "events/delete_event.html", {"event": event})

Wszystkie lekcje w sekcji Formularze

Poćwicz samodzielnie: Edytor online Django