Einen Gast entfernen
Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 20 von 20.
Die organisierende Person muss Personen von der Gästeseite entfernen. Jede Zeile erhält ein eigenes kleines Formular, dessen action eine URL für genau diese Zeile ist, sodass eine Schaltfläche nur Daten zu ihrer Zeile sendet. Eine To-do-Liste mit einer Schaltfläche „Erledigt“ für jede Aufgabe:
{% for task in tasks %}
<li>
{{ task.title }}
<form method="post" action="{% url 'todo:finish' task.pk %}">
{% csrf_token %}
<button type="submit">Done</button>
</form>
</li>
{% endfor %}Eine Ansicht wie finish hat keine Seite: Sie führt lediglich eine Aktion aus. @require_POST aus django.views.decorators.http beantwortet jede andere Methode mit 405, bevor die Ansicht ausgeführt wird. So entfernt weder ein Link noch eine eingegebene Adresse jemanden:
@require_POST
def finish(request, pk):Füge nach der Aktion wie zuvor eine Nachricht hinzu und leite weiter.
Aufgabe
Schwer- Auf der Gästeseite erhält jeder Gast eine Schaltfläche
Remove, die eine POST-Anfrage an/rsvps/<pk>/remove/sendet (URL-Nameremove_rsvp). - Diese View akzeptiert nur POST-Anfragen. Sie löscht die RSVP, fügt
Ada was removed from the guest list.mit dem Namen des Gastes hinzu und leitet zur Gästeseite der Veranstaltung weiter.
Klicke auf Run und entferne einen Gast.
Probier es selbst
from django.contrib import messages
from django.shortcuts import get_object_or_404, redirect, render
from .forms import EventForm, RSVPForm
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)
if request.method == "POST":
form = RSVPForm(request.POST, event=event)
if form.is_valid():
rsvp = form.save(commit=False)
rsvp.event = event
rsvp.save()
messages.success(request, "You're on the list!")
return redirect("events:detail", pk=event.pk)
else:
form = RSVPForm(event=event)
return render(request, "events/event_detail.html", {"event": event, "form": form})
def new_event(request):
if request.method == "POST":
form = EventForm(request.POST)
if form.is_valid():
event = form.save()
messages.success(request, "Your event was added.")
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()
messages.success(request, "Your changes were saved.")
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)
if request.method == "POST":
event.delete()
messages.success(request, "The event was deleted.")
return redirect("events:list")
return render(request, "events/delete_event.html", {"event": event})
def guest_list(request, pk):
event = get_object_or_404(Event, pk=pk)
return render(request, "events/guest_list.html", {"event": event})
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Formulare
Übe selbstständig: Django-Playground