Menu
CoddyTech

입력값 확인

Coddy Django 여정의 폼 섹션에 포함된 레슨. 20개 중 4번째.

제목을 비워 둔 채 양식을 제출하면 보드에 이름이 없는 이벤트가 생성됩니다. request.POST에는 어떤 값이든 들어올 수 있으므로 뷰는 저장하기 전에 이를 확인합니다.

입력값이 올바르지 않으면 뷰는 아무것도 저장하지 않고 리디렉션하지도 않습니다. 대신 메시지와 함께 양식 페이지를 다시 렌더링합니다. 손님을 1명에서 8명까지 받는 테이블 예약 양식은 다음과 같습니다.

guests = request.POST["guests"]
if not guests.isdigit() or not 1 <= int(guests) <= 8:
    problem = "Choose between 1 and 8 guests."
    return render(request, "tables/book.html", {"problem": problem})
Booking.objects.create(guests=int(guests))

create()보다 먼저 확인해야 합니다. 행이 저장되고 나면 메시지를 보여 주기에는 이미 늦습니다. 텍스트의 경우 .strip()은 양쪽 끝의 공백을 제거하므로 공백만 있는 제목은 빈 문자열이 됩니다. 템플릿은 메시지가 있을 때만 이를 표시합니다.

{% if problem %}
<p class="warning">{{ problem }}</p>
{% endif %}
challenge icon

챌린지

쉬움

제목이 없는 이벤트는 거부하세요.

  1. events/views.py의 new_event에서 제목이 비어 있거나 공백만 있으면 아무것도 저장하지 말고 메시지 Please give the event a title.와 함께 양식 페이지를 다시 렌더링하세요. 제목이 있는 양식은 이벤트를 추가하고 리디렉션합니다.
  2. new_event.html에서 양식 위에 메시지가 있을 때만 표시하세요.

공백 세 개로 된 제목을 보내세요. Please give the event a title. 메시지가 표시되고 아무것도 저장되지 않습니다.

직접 해보기

from django.shortcuts import get_object_or_404, redirect, render

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)
    return render(request, "events/event_detail.html", {"event": event})


def new_event(request):
    if request.method == "POST":
        event = Event.objects.create(
            title=request.POST["title"],
            date=request.POST["date"],
            place=request.POST["place"],
        )
        return redirect("events:detail", pk=event.pk)
    return render(request, "events/new_event.html")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

폼의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드