HTML Diff
11 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 - error code: 502
1 + <p>Удаление - самое простое действие в обычном CRUD. Ему не нужен шаблон. Удаление состоит из простого обработчика, в котором нет условных конструкций. В этом уроке научимся правильно удалять сущности.</p>
 
2 + <p>Для удаления сущности, нужно добавить новые маршрут и обработчик:</p>
 
3 + <h3>Маршрут</h3>
 
4 + <h3>Обработчик</h3>
 
5 + <p>Самое интересное в удалении - это ссылка или кнопка удаления. Она не может быть обычной ссылкой. С точки зрения HTTP, удаление - это DELETE-запрос. Эту семантику важно соблюдать, так как на нее ориентируются разные инструменты и поисковики при анализе страниц.</p>
 
6 + <p>Django, как и большинство python фреймворков, принимает данные через GET или POST запросы. Для обработки таких запросов как DELETE или PATCH используются маршруты, содержащие в себе название действия и привязанные к соответствующим обработчикам POST запросов.</p>
 
7 + <p>Но если сделать удаление обычной ссылкой, то любой автоматический инструмент может попробовать перейти по ней, например, предзагрузка страниц в Chrome. Это будет крайне неприятный сюрприз.</p>
 
8 + <p>Чтобы решить подобную проблему, сделаем ссылку на удаление формой:</p>
 
9 + <h2>Зависимости</h2>
 
10 + <p>В реальной жизни удаление не такая простая операция. Обычно сущности не существуют сами по себе, у них есть зависимости. Например, у статьи есть комментарии, а у курса - уроки. Как должна вести себя система при удалении родительской сущности? Что делать с зависимостями?</p>
 
11 + <p>Ответ будет разный для разных проектов и разных сущностей. Иногда нужно все удалить, иногда разорвать связи. В более сложных ситуациях удалять нельзя вообще. В таких случаях используется "мягкое удаление". При таком подходе сущность просто помечается как удаленная и не выводится на сайте, но всегда есть возможность ее восстановить.</p>