Menu
CoddyTech

Memeriksa input

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

Kirim formulir dengan judul kosong, lalu papan akan menerima acara tanpa nama. Apa pun bisa masuk ke request.POST, jadi view memeriksanya sebelum menyimpan.

Jika input salah, view tidak menyimpan apa pun dan tidak mengalihkan halaman: view menampilkan kembali halaman formulir dengan pesan. Contoh formulir pemesanan meja yang menerima 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 itu sudah terlambat. Untuk teks, .strip() menghapus spasi di kedua ujung, jadi judul yang hanya berisi spasi menjadi kosong. Templat hanya menampilkan pesan jika ada:

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

Tantangan

Mudah

Tolak acara tanpa judul.

  1. Di new_event dalam events/views.py, jika judul kosong atau hanya berisi spasi, jangan simpan apa pun dan tampilkan kembali halaman formulir dengan pesan Please give the event a title. Formulir dengan judul tetap menambahkan acara dan mengarahkan ke halaman lain.
  2. Di new_event.html, tampilkan pesan di atas formulir hanya jika ada.

Kirim judul yang terdiri dari tiga spasi: kamu akan melihat Please give the event a title. dan tidak ada yang disimpan.

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