Usuń gościa
Część sekcji Formularze ścieżki Django w Coddy. Lekcja 20 z 20.
Organizator musi usuwać osoby ze strony gości. Każdy wiersz ma własny mały formularz, którego action jest adresem URL dla tego wiersza, więc przycisk wysyła dane dotyczące tylko tego wiersza. Lista zadań z przyciskiem Done przy każdym zadaniu:
{% 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 %}Widok taki jak finish nie ma strony: jedynie wykonuje działanie. @require_POST z django.views.decorators.http odpowiada kodem 405 na każde inne żądanie przed uruchomieniem widoku, więc link ani ręcznie wpisany adres nigdy nikogo nie usuną:
@require_POST
def finish(request, pk):Po wykonaniu działania dodaj komunikat i przekieruj, tak jak wcześniej.
Wyzwanie
Trudny- Na stronie gości każdy gość ma przycisk
Remove, który wysyła żądanie POST na adres/rsvps/<pk>/remove/(nazwa URLremove_rsvp). - Ten widok akceptuje tylko żądania POST. Usuwa zgłoszenie RSVP, dodaje komunikat
Ada was removed from the guest list.z imieniem gościa i przekierowuje na stronę gości wydarzenia.
Naciśnij Run i usuń gościa.
Spróbuj swoich sił
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})
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Formularze
Poćwicz samodzielnie: Edytor online Django