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