نموذج POST
جزء من قسم النماذج في رحلة Django على Coddy. الدرس 2 من 20.
الصفحة /events/new/ والعرض الخاص بها جاهزان، لكن الصفحة لا تحتوي على نموذج لإضافة فعالية. يستخدم النموذج الذي يغيّر البيانات method="post": يرسل المتصفح الحقول في متن الطلب، وليس في عنوان URL. يقرأها العرض من request.POST، ويحدّد كل حقل باستخدام name الخاص به.
يضيف Django قاعدة واحدة. فقد يخفي موقع ويب آخر نموذجًا يرسل البيانات إلى موقعك، ويرسله متصفح الزائر مع ملفات تعريف الارتباط الخاصة به: وهذا هجوم يُسمى CSRF. لذلك يرفض Django أي طلب POST لا يتضمن رمزًا سريًا من صفحتك، ويردّ بالخطأ 403 Forbidden. يضيف {% 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" فيعرض تقويمًا.
التحدي
سهلفي new_event.html، اكتب النموذج الذي تتوقعه دالة العرض:
- يرسل حقوله باستخدام POST ويتضمن رمز CSRF.
- حقل إدخال واحد مع تسمية لكل قيمة تقرؤها دالة العرض. يعرض حقل التاريخ تقويمًا.
- زر إرسال.
اضغط على تشغيل، وأضف فعالية، ثم افتح الصفحة الرئيسية.
جرّب بنفسك
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# اكتب النموذج هنا #}
{% endblock %}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس النماذج
تدرّب بنفسك: Playground لـ Django