게스트 삭제
Coddy Django 여정의 폼 섹션에 포함된 레슨. 20개 중 20번째.
주최자는 게스트 페이지에서 사람들을 제거해야 합니다. 각 행에는 해당 행의 URL을 action으로 사용하는 작은 양식이 있으므로, 버튼을 누르면 해당 행에 대해서만 요청이 전송됩니다. 작업마다 완료 버튼이 있는 할 일 목록은 다음과 같습니다.
{% 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 같은 뷰에는 페이지가 없습니다. 이 뷰는 작업만 수행합니다. django.views.decorators.http의 @require_POST는 뷰가 실행되기 전에 다른 모든 메서드에 405로 응답하므로, 링크를 누르거나 주소를 직접 입력해도 누구도 제거되지 않습니다.
@require_POST
def finish(request, pk):작업을 수행한 뒤에는 이전처럼 메시지를 추가하고 리디렉션합니다.
챌린지
어려움- 게스트 페이지에서 각 게스트에게
Remove버튼이 표시되며, 이 버튼은/rsvps/<pk>/remove/(URL 이름remove_rsvp)으로 POST 요청을 보냅니다. - 이 뷰는 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})
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
폼의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드