نموذج POST
جزء من قسم النماذج في رحلة Django على Coddy. الدرس 2 من 20.
الصفحة /events/new/ وطريقة العرض الخاصة بها جاهزتان، لكن الصفحة لا تحتوي على نموذج لإضافة حدث. يستخدم النموذج الذي يغيّر البيانات method="post": يرسل المتصفح الحقول في متن الطلب، وليس في عنوان URL. تقرؤها طريقة العرض من request.POST، باستخدام قيمة name لكل حقل إدخال كمفتاح.
يحمي Django أيضًا كل نموذج يرسل طلب POST. يمكن لموقع آخر إخفاء نموذج يرسل طلبًا إلى موقعك، وسيرسله متصفح الزائر مع ملفات تعريف الارتباط الخاصة به. يُسمى هذا الهجوم تزوير الطلبات عبر المواقع، واختصاره CSRF. لذلك يرفض Django أي طلب POST لا يتضمن رمزًا سريًا من صفحتك، ويردّ بالخطأ 403 محظور. يضيف {% csrf_token %} هذا الرمز إلى النموذج. نموذج للاشتراك في نشرة إخبارية:
<form method="post">
{% csrf_token %}
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Subscribe</button>
</form>يحدّد <label> حقل الإدخال الذي تطابق قيمة id فيه قيمة for، ويعرض type="date" تقويمًا.
التحدي
سهلفي events/templates/events/new_event.html، استبدل {# Write the form here #} بنموذج.
- استخدم
method="post"وضع{% csrf_token %}أولًا. من دونه، يرفض Django النموذج ويعيد الخطأ 403. - أضف حقل إدخال مع تسمية لكل من
titleوdate(معtype="date") وplace، ثم زر إرسال.
أضف فعالية، ثم اضغط على «كل الفعاليات»: ستجدها في القائمة.
جرّب بنفسك
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# اكتب النموذج هنا #}
{% endblock %}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس النماذج
تدرّب بنفسك: Playground لـ Django