Menu
CoddyTech

הסרת אורח

חלק מהיחידה טפסים במסלול ה-Django של Coddy. שיעור 20 מתוך 20.

המארגן צריך להסיר אנשים מדף האורחים. לכל שורה יש טופס קטן משלה שה־action שלו הוא כתובת URL של אותה שורה, כך שלחיצה על כפתור שולחת נתונים רק לגבי השורה שלו. רשימת מטלות עם כפתור Done לכל משימה:

{% 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 אין דף: היא רק מבצעת פעולה. @require_POST מתוך django.views.decorators.http משיב בשגיאה 405 לכל שיטה אחרת לפני שהתצוגה מופעלת, כך שקישור או הקלדת כתובת לעולם לא יסירו אף אחד:

@require_POST
def finish(request, pk):

לאחר ביצוע הפעולה, הוסף הודעה והפנה מחדש, כמו קודם.

challenge icon

אתגר

קשה
  • בעמוד האורחים, לכל אורח יש כפתור Remove ששולח בקשת POST אל /rsvps/<pk>/remove/ (שם כתובת ה-URL הוא remove_rsvp).
  • התצוגה הזאת מקבלת רק בקשות POST. היא מוחקת את ה-RSVP, מוסיפה את Ada was removed from the guest list. יחד עם שם האורח ומפנה לעמוד האורחים של האירוע.

לחצו על Run והסירו אורח.

נסו בעצמכם

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 iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה טפסים

תרגלו בעצמכם: Django אונליין