Menu
CoddyTech

בדיקת קלט

חלק מהיחידה טפסים במסלול ה-Django של Coddy. שיעור 4 מתוך 20.

שלח את הטופס עם כותרת ריקה, ובלוח יופיע אירוע ללא שם. כל דבר יכול להגיע אל request.POST, לכן תצוגה בודקת את הנתונים לפני השמירה.

כשהקלט שגוי, התצוגה לא שומרת דבר ולא מפנה לדף אחר: היא מציגה שוב את דף הטופס עם הודעה. טופס להזמנת שולחן שמקבל בין אורח אחד ל־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 ושלח את הטופס עם כותרת שמכילה שלושה רווחים.

נסו בעצמכם

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 אונליין