التحقق من المدخلات
جزء من قسم النماذج في رحلة 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")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس النماذج
تدرّب بنفسك: Playground لـ Django