בדיקת קלט
חלק מהיחידה טפסים במסלול ה-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 %}אתגר
קלדחה אירוע ללא כותרת.
- ב־
new_eventבקובץevents/views.py, כשהכותרת ריקה או מכילה רווחים בלבד, אל תשמור דבר והצג שוב את דף הטופס עם ההודעהPlease give the event a title.טופס עם כותרת עדיין מוסיף את האירוע ומפנה מחדש. - ב־
new_event.html, הצג את ההודעה מעל הטופס רק אם היא קיימת.
שלח כותרת בת שלושה רווחים: תראה את ההודעה 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")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה טפסים
תרגלו בעצמכם: Django אונליין