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

챌린지

쉬움

제목이 없는 이벤트는 거부합니다:

  • 제목이 비어 있거나 공백만 있으면 new_event는 양식 위에 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 플레이그라운드