Menu
CoddyTech

入力のチェック

CoddyのDjangoジャーニー「フォーム」セクションの一部。レッスン 4/20。

タイトルを空のままフォームを送信すると、ボードには名前のないイベントが作成されます。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.を表示します。また、何も保存しません。
  • タイトルを入力したフォームを送信すると、イベントが追加され、そのイベントのページにリダイレクトされます。

「Run」を押して、タイトルにスペースを3つ入力したフォームを送信してください。

自分で試してみよう

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プレイグラウンド