Menu
CoddyTech

Bir Konuğu Kaldırma

Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 20 / 20.

Düzenleyicinin konuk sayfasından kişileri çıkarması gerekiyor. Her satırın, action niteliği o satıra özel bir URL olan kendi küçük formu bulunur; böylece bir düğmeye basıldığında yalnızca o satırla ilgili istek gönderilir. Her görev için bir Tamamlandı düğmesi bulunan bir yapılacaklar listesi:

{% 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 %}

finish gibi bir görünümün sayfası yoktur: yalnızca işlem yapar. django.views.decorators.http içindeki @require_POST, görünüm çalışmadan önce diğer tüm yöntemlere 405 yanıtı verir; böylece bir bağlantıya tıklamak ya da adresi elle yazmak kimseyi listeden çıkarmaz:

@require_POST
def finish(request, pk):

İşlem yaptıktan sonra, daha önce olduğu gibi bir mesaj ekleyip yönlendirme yapın.

challenge icon

Görev

Zor
  • Misafir sayfasında her misafir, /rsvps/<pk>/remove/ adresine (remove_rsvp URL adı) POST isteği gönderen bir Remove düğmesi alır.
  • Bu görünüm yalnızca POST isteklerini kabul eder. RSVP kaydını siler, misafirin adını içeren Ada was removed from the guest list. mesajını ekler ve etkinliğin misafir sayfasına yönlendirir.

Run'a basın ve bir misafiri kaldırın.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Formlar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground