Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

CRUD: Удаление Python: Веб-разработка (Flask)

В этом уроке разберем удаление сущности. Оно устроено проще вывода, но включает в себя много нюансов:

image_processing.png

Удаление сущности

Удаление выглядит следующим образом:

@app.route('/school/<id>/delete', methods=['POST'])
def delete_school(id):
    repo = SchoolRepository()
    repo.destroy(id)
    flash('School has been deleted', 'success')
    return redirect(url_for('schools'))

В процессе удаления есть и чисто интерфейсный момент, который начинающие разработчики упускают из виду. Кнопка удаления не должна сразу удалять. Человеку свойственно ошибаться, а еще он любопытен. Поэтому вероятность, что он нажмет на кнопку по ошибке, крайне высока. Необходимо сначала спросить у пользователя, уверен ли он в том, что хочет удалить. Если да, то только в этом случае удалять.

Удаление пользователя — опасная операция, которую нельзя выполнять всем подряд. Даже те, кто могут это делать, должны проходить через процедуру подтверждения, чтобы случайно не удалить пользователя. Имеет ли пользователь доступ к конкретным действиям — определяется авторизацией.

Авторизация

Авторизация — это предоставление лицу или группе лиц прав на выполнение определенных действий. Еще это процесс проверки данных прав при попытке выполнения этих действий.

Авторизацию не следует путать с аутентификацией — процедурой проверки легальности пользователя или данных. Например, проверки соответствия введенного пользователем пароля к учетной записи паролю Wiki. То есть перед выполнением действия необходимо проверить, авторизован ли пользователь на выполнение данного действия или нет.

Авторизация — отдельная большая тема со своей теоретической базой. Как правило, вопрос авторизации решается в каждом конкретном фреймворке самостоятельно, хотя на GitHub можно найти обобщенные библиотеки.

Запрос DELETE

Удаляется сущность запросом DELETE. По спецификации HTTP этот глагол идемпотентный — поведение, в случае наличия или отсутствия сущности, должно быть одинаковое. То есть HTTP-ответ этого обработчика не зависит от того, удалена уже сущность или еще нет.

Но как мы помним, HTML-формы не поддерживают отправку методами, отличными от GET и POST. Фреймворки выкручиваются из этой ситуации следующим образом. Форма отправляется POST-запросом на маршрут, который связан с обработчиком для удаления объекта:

<form action="{{ url_for('delete_school', id=school.id) }}" method="post">
  <input type="submit" value="Remove">
</form>

Важно соблюдать семантику HTTP. Нельзя создавать HTML, в котором удаление происходит GET-запросом, например, по ссылке. Браузеры, их плагины и поисковые системы действуют в соответствии с семантикой HTTP. Если они видят обычную ссылку, то подразумевается, что она не может выполнить деструктивных действий, значит, ее можно посетить. При этом мы можем работать в закрытой от поисковиков части сайта. В браузерах встроен механизм предзагрузки страниц: он вызовет все ссылки, до которых сможет дотянуться на открытой странице. А плагины могут делать вообще все что угодно.


Самостоятельная работа

  1. Реализуйте удаление пользователей

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
с нуля
Разработка веб-приложений на Django
2 февраля 10 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»