Python: Разработка на фреймворке Django
2026-02-26 18:38 Diff

Создание сущности в CRUD требует наличия двух маршрутов: один для отображения формы, другой — для обработки формы. Также важно понимать, как взаимодействуют между собой эти маршруты, и как обрабатываются ошибки. Начнем с того, что у нас есть три состояния:

  • Отображение новой формы
  • Отображение формы с подсвеченными ошибками валидации после ее отправки
  • Редирект на страницу после успешной обработки формы. Обычно это редактирование сущности или списка сущностей

Самое интересное здесь это когда пользователь нажал кнопку отправки, данные формы приходят в обработчик формы. Этот обработчик выполняет валидацию — проверку введенных данных. Например, проверяет, что данные в принципе есть — они не пустые. Если данные корректные, то обработка завершается, и пользователя отправляют в другое место. Если нет, то Django должен отработать эту ситуацию и сообщить пользователю о неверно введенных данных.

С точки зрения пользователя, сайт снова отображает форму с подставленными значениями, которые он ввел раньше. Кроме этого, на странице выводятся возникшие ошибки. Дальше пользователь их исправляет и отправляет форму заново. Этот процесс может повторяться много раз перед тем, как пользователь сделает все правильно.

Технически Django ведет себя так:

  1. Пользователь ввел что-то некорректно — происходит редирект на страницу с формой
  2. Django автоматически записывает данные формы в сессию, а затем использует эти данные для подстановки в форму. Тут участвует ModelForm

Для реализации добавления новой сущности, нам нужно добавить четыре составляющие: описание формы, маршрут, обработчик маршрута, шаблон:

Форма

Форма описывает поля существующей модели Article. Поэтому для описания формы воспользуемся вспомогательным классом ModelForm, чтобы создать Form-класс из модели Django:

Маршрут

Обработчик

В данном get-обработчике мы создаем объект формы и передаем его в шаблон:

Шаблон

Обработчик данных формы

В данном обработчике нам понадобился доступ к объекту запроса. Любая информация о HTTP-запросе и любые данные, которые отправили по HTTP, можно получить только через request.

Первым делом объект request используется в валидации. Валидация в Django привязана к запросу. Она выполняется с помощью метода is_valid(), который доступен в каждом классе формы.

Метод is_valid() возвращает true, если данные формы в порядке, и false — в случае ошибок. Если найдены ошибки, то Django сохраняет данные формы и создает словарь ошибок, который можно получить через поле errors. Самый простой способ вывести ошибки, добавить над формой такой код:

Вернемся к обработчику. Сразу после валидации данные формы сохраняются:

Когда объект сохранился в базе данных, осталось перенаправить пользователя в нужное место после успешного создания. Обычно отправка идет на список сущностей или страницу редактирования: