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