Форма 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" отображает календарь.
Задание
ЛегкоВ 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 %}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Формы
Потренируйтесь самостоятельно: Песочница Django