Menu
CoddyTech

Форма 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" отображает календарь.

challenge icon

Задание

Легко

В файле new_event.html напиши форму, которую ожидает представление:

  • Она отправляет поля методом POST и содержит CSRF-токен.
  • По одному полю ввода с меткой для каждого значения, которое считывает представление. Поле ввода даты отображает календарь.
  • Кнопка отправки.

Нажми «Run», добавь мероприятие, затем открой главную страницу.

Попробуйте сами

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

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

{% block content %}
<h1>Add an event</h1>
{# Напишите здесь форму #}
{% endblock %}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Формы

Потренируйтесь самостоятельно: Песочница Django