Форма POST
Часть раздела Формы путешествия по Django на Coddy. Урок 2 из 20.
Страница /events/new/ и её представление готовы, но на странице нет формы для добавления события. Форма, которая изменяет данные, использует method="post": браузер отправляет поля в теле запроса, а не в URL. Представление считывает их из request.POST, используя значение name каждого поля ввода в качестве ключа.
Django добавляет одно правило. Другой сайт может скрыть форму, отправляющую запрос на ваш сайт, и браузер посетителя отправит его вместе с его файлами 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" отображает календарь.
Задание
ЛегкоВ файле new_event.html напиши форму, которую ожидает представление:
- Она отправляет поля методом POST и содержит CSRF-токен.
- По одному полю ввода с меткой для каждого значения, которое считывает представление. Поле ввода даты отображает календарь.
- Кнопка отправки.
Нажми «Run», добавь мероприятие, затем открой главную страницу.
Попробуйте сами
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# Напишите здесь форму #}
{% endblock %}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Формы
Потренируйтесь самостоятельно: Песочница Django