HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Обновление очень похоже на создание, но есть одно отличие: мы не создаем сущность с нуля, а извлекаем ее из базы. Остальное практически без изменений.</p>
1 <p>Обновление очень похоже на создание, но есть одно отличие: мы не создаем сущность с нуля, а извлекаем ее из базы. Остальное практически без изменений.</p>
2 <p>При этом остается важный вопрос - права на изменение. Изменять что-то на сайте может только автор - кто создал сущность. Механизм, который отвечает за выдачу и проверку прав, называется<strong>авторизацией</strong>. В Django авторизация встроена. Она не рассматривается в курсе, но про нее можно прочитать самостоятельно в<a>документации</a>.</p>
2 <p>При этом остается важный вопрос - права на изменение. Изменять что-то на сайте может только автор - кто создал сущность. Механизм, который отвечает за выдачу и проверку прав, называется<strong>авторизацией</strong>. В Django авторизация встроена. Она не рассматривается в курсе, но про нее можно прочитать самостоятельно в<a>документации</a>.</p>
3 <h2>Форма</h2>
3 <h2>Форма</h2>
4 <p>Для реализации обновления сущности, нам нужно добавить новые маршрут и обработчик маршрута:</p>
4 <p>Для реализации обновления сущности, нам нужно добавить новые маршрут и обработчик маршрута:</p>
5 <h3>Маршрут</h3>
5 <h3>Маршрут</h3>
6 <p>Важно добавить этот маршрут до маршрута articles/&lt;int:id&gt;/. Иначе последний перехватит обращение к articles/&lt;int:id&gt;/edit/, так как он соответствует шаблону.</p>
6 <p>Важно добавить этот маршрут до маршрута articles/&lt;int:id&gt;/. Иначе последний перехватит обращение к articles/&lt;int:id&gt;/edit/, так как он соответствует шаблону.</p>
7 <h3>Обработчик</h3>
7 <h3>Обработчик</h3>
8 <p>В данном обработчике мы получаем номер редактируемой статьи. Получаем информацию о записи из базы данных по её id. Для заполнения формы данными из модели мы применяем дополнительный аргумент instance класса формы, в который передаем нашу модель с данными.</p>
8 <p>В данном обработчике мы получаем номер редактируемой статьи. Получаем информацию о записи из базы данных по её id. Для заполнения формы данными из модели мы применяем дополнительный аргумент instance класса формы, в который передаем нашу модель с данными.</p>
9 <h3>Шаблон</h3>
9 <h3>Шаблон</h3>
10 <p>Шаблон редактирования практически один в один повторяет шаблон создания. Разными у них бывают только отдельные элементы, например, текст кнопки отправки формы. Для таких случаев можно использовать<a>инструкцию<em>include</em></a>. Она позволяет извлекать общие куски шаблонов в отдельные шаблоны и включать их там где нужно.</p>
10 <p>Шаблон редактирования практически один в один повторяет шаблон создания. Разными у них бывают только отдельные элементы, например, текст кнопки отправки формы. Для таких случаев можно использовать<a>инструкцию<em>include</em></a>. Она позволяет извлекать общие куски шаблонов в отдельные шаблоны и включать их там где нужно.</p>
11 <p>Основных изменений здесь два:</p>
11 <p>Основных изменений здесь два:</p>
12 <ul><li>Другое имя кнопки</li>
12 <ul><li>Другое имя кнопки</li>
13 <li>Адрес формы указывает на конкретную статью</li>
13 <li>Адрес формы указывает на конкретную статью</li>
14 </ul><h3>Обработчик формы</h3>
14 </ul><h3>Обработчик формы</h3>
15 <p>Обработчик, который обновляет сущность, практически идентичен созданию сущности. Только мы работаем с существующей статьей, поэтому ее нужно извлечь из базы данных. Остальное всё то же самое: сохранение и редирект на список статей.</p>
15 <p>Обработчик, который обновляет сущность, практически идентичен созданию сущности. Только мы работаем с существующей статьей, поэтому ее нужно извлечь из базы данных. Остальное всё то же самое: сохранение и редирект на список статей.</p>