Menu
CoddyTech

טופס POST

חלק מהיחידה טפסים במסלול ה-Django של Coddy. שיעור 2 מתוך 20.

העמוד /events/new/ והתצוגה שלו מוכנים, אבל אין בעמוד טופס להוספת אירוע. טופס שמשנה נתונים משתמש ב־method="post": הדפדפן שולח את השדות בגוף הבקשה, ולא בכתובת ה־URL. התצוגה קוראת אותם מתוך request.POST, לפי הערך של name בכל קלט.

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

challenge icon

אתגר

קל

ב־events/templates/events/new_event.html, החליפו את {# Write the form here #} בטופס.

  1. השתמשו ב־method="post" והציבו את {% csrf_token %} ראשון. בלעדיו, Django מסרב לקבל את הטופס ומחזיר שגיאת 403.
  2. הוסיפו שדה קלט עם תווית עבור title, date (עם type="date") ו־place, ולאחר מכן כפתור שליחה.

הוסיפו אירוע, ואז לחצו על «כל האירועים»: הוא מופיע ברשימה.

נסו בעצמכם

{% extends "events/base.html" %}

{% block title %}Add an event{% endblock %}

{% block content %}
<h1>Add an event</h1>
{# כתבו כאן את הטופס #}
{% endblock %}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה טפסים

תרגלו בעצמכם: Django אונליין