Menu
CoddyTech

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 przypisanym do tego jednego wiersza, więc przycisk wysyła dane tylko dotyczące swojego wiersza. Lista zadań z przyciskiem „Gotowe” 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 wyświetla strony: zmienia dane i przekierowuje. @require_POST, z django.views.decorators.http, odrzuca każde inne żądanie, zwracając błąd 405 Method Not Allowed, więc link ani wpisany adres nigdy nikogo nie usuną:

@require_POST
def finish(request, pk):

Po wykonaniu działania dodaj komunikat i przekieruj, jak poprzednio.

challenge icon

Wyzwanie

Trudny

Usuń gościa.

  1. W events/urls.py dodaj ścieżkę rsvps/<int:pk>/remove/ o nazwie remove_rsvp.
  2. W events/views.py napisz funkcję remove_rsvp z dekoratorem @require_POST (z django.views.decorators.http). Usuwa ona RSVP, dodaje komunikat Ada was removed from the guest list. z imieniem gościa i przekierowuje na stronę gości.
  3. W guest_list.html dodaj każdemu gościowi formularz POST z {% csrf_token %} i przyciskiem Remove, który wysyła żądanie na jego adres URL.

Usuń Adę: zostaje tylko Grace.

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})
quiz iconSprawdź się

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