HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В этом уроке разберем, как обновлять сущность.</p>
1 <p>В этом уроке разберем, как обновлять сущность.</p>
2 <h2>Обновление сущности</h2>
2 <h2>Обновление сущности</h2>
3 <p>Обновление - самое сложное из всех по объему действий. С точки зрения кода новое здесь только одно - заполнение сущности данными формы: school['name'] = data['name']. Этот процесс сильно изменится при использовании ORM, а пока мы будем проставлять каждое значение руками:</p>
3 <p>Обновление - самое сложное из всех по объему действий. С точки зрения кода новое здесь только одно - заполнение сущности данными формы: school['name'] = data['name']. Этот процесс сильно изменится при использовании ORM, а пока мы будем проставлять каждое значение руками:</p>
4 <p>Как и в случае создания, для обновления будет два обработчика: первый выводит форму редактирования, а второй обрабатывает полученные данные.</p>
4 <p>Как и в случае создания, для обновления будет два обработчика: первый выводит форму редактирования, а второй обрабатывает полученные данные.</p>
5 <p>Сперва выведем форму обновления. Для этого найдем в базе переданного пользователя и подставим его данные в форму:</p>
5 <p>Сперва выведем форму обновления. Для этого найдем в базе переданного пользователя и подставим его данные в форму:</p>
6 <p><strong>Обработчик формы обновления</strong></p>
6 <p><strong>Обработчик формы обновления</strong></p>
7 <p><strong>Шаблон обновления</strong></p>
7 <p><strong>Шаблон обновления</strong></p>
8 <p>Затем добавим обработчик введенных данных. Общий порядок действий такой же как у создания - извлекаем данные,валидируем. Основное различие, что вместо создания новой записи в базе мы заменим часть данных у существующей.</p>
8 <p>Затем добавим обработчик введенных данных. Общий порядок действий такой же как у создания - извлекаем данные,валидируем. Основное различие, что вместо создания новой записи в базе мы заменим часть данных у существующей.</p>
9 <p><strong>Обработчик обновления</strong></p>
9 <p><strong>Обработчик обновления</strong></p>
10 <p>В примере выше заменяем данные вручную, но в полноценных фреймворках этот процесс обычно упрощен. Теоретически можно сделать и так: school=data. Но у этого подхода есть один большой недостаток. Такой способ не безопасен, так как пользователь может послать данные в обход формы, например, количество денег на счету, и изменит их значение. Эту проблему решают те же пакеты, которые предоставляют Form Builder. Обычно они сразу встроены во фреймворки.</p>
10 <p>В примере выше заменяем данные вручную, но в полноценных фреймворках этот процесс обычно упрощен. Теоретически можно сделать и так: school=data. Но у этого подхода есть один большой недостаток. Такой способ не безопасен, так как пользователь может послать данные в обход формы, например, количество денег на счету, и изменит их значение. Эту проблему решают те же пакеты, которые предоставляют Form Builder. Обычно они сразу встроены во фреймворки.</p>
11 <h2>Методы</h2>
11 <h2>Методы</h2>
12 <p>Для изменения правильно использовать HTTP-методы<em>PATCH</em>или<em>PUT</em>. Выбор будет зависеть от того, как происходит обновление. Но HTML позволяет указывать внутри тега<a>&lt;form&gt;</a>только POST или GET. С точки зрения семантики HTTP, это не совсем верно.<em>POST</em>предназначен для создания нового. НО если посмотреть на определение обработчика выше, то там мы тоже увидим использование<em>POST</em>.</p>
12 <p>Для изменения правильно использовать HTTP-методы<em>PATCH</em>или<em>PUT</em>. Выбор будет зависеть от того, как происходит обновление. Но HTML позволяет указывать внутри тега<a>&lt;form&gt;</a>только POST или GET. С точки зрения семантики HTTP, это не совсем верно.<em>POST</em>предназначен для создания нового. НО если посмотреть на определение обработчика выше, то там мы тоже увидим использование<em>POST</em>.</p>
13 <p>Почему же мы так сделали? Со своей стороны микрофреймворк Flask предоставляет лишь роутинг - он не может управлять поведением форм. Поэтому при использовании HTML-формы приходится идти на компромисс - принимать данные через<em>POST</em>-запрос.</p>
13 <p>Почему же мы так сделали? Со своей стороны микрофреймворк Flask предоставляет лишь роутинг - он не может управлять поведением форм. Поэтому при использовании HTML-формы приходится идти на компромисс - принимать данные через<em>POST</em>-запрос.</p>
14 <p>Но чтобы различать создание сущности от редактирования и других операции, придется использовать маршруты, которые привязаны к соответствующим обработчикам и содержат какое-то действие в названии. Например, для обновления маршрут будет выглядеть так:<em>/posts/id/update</em>.</p>
14 <p>Но чтобы различать создание сущности от редактирования и других операции, придется использовать маршруты, которые привязаны к соответствующим обработчикам и содержат какое-то действие в названии. Например, для обновления маршрут будет выглядеть так:<em>/posts/id/update</em>.</p>