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. فوق النموذج، ولا تحفظ شيئًا.
  • النموذج الذي يحتوي على عنوان يضيف الحدث ويعيد التوجيه إليه.

اضغط على تشغيل وأرسل النموذج بعنوان يتكوّن من ثلاث مسافات.

جرّب بنفسك

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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس النماذج

تدرّب بنفسك: Playground لـ Django