Menu
CoddyTech

Memeriksa input

Termasuk bagian Formulir dalam perjalanan Django di Coddy. Pelajaran 4 dari 20.

Kirim formulir dengan judul kosong, lalu board akan menerima event tanpa nama. Apa pun bisa tiba di request.POST, jadi sebuah view memeriksanya sebelum menyimpan.

Jika input salah, view tidak menyimpan apa pun dan tidak mengalihkan halaman: view merender halaman formulir lagi dengan pesan. Berikut formulir pemesanan meja untuk 1 hingga 8 tamu:

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))

Pemeriksaan dilakukan sebelum create(): setelah baris disimpan, pesan sudah terlambat. Untuk teks, .strip() menghapus spasi di kedua ujung, jadi judul yang hanya berisi spasi menjadi kosong. Template menampilkan pesan hanya jika ada:

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

Tantangan

Mudah

Tolak acara tanpa judul:

  • Jika judul kosong atau hanya berisi spasi, new_event menampilkan kembali halaman formulir dengan Please give the event a title. di atas formulir, dan tidak menyimpan apa pun.
  • Formulir dengan judul tetap menambahkan acara dan mengarahkan ke halaman acara tersebut.

Tekan Jalankan dan kirim formulir dengan judul yang terdiri dari tiga spasi.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Formulir

Latihan sendiri: Playground Django