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><form></a>только POST или GET. С точки зрения семантики HTTP, это не совсем верно.<em>POST</em>предназначен для создания нового. НО если посмотреть на определение обработчика выше, то там мы тоже увидим использование<em>POST</em>.</p>
12
<p>Для изменения правильно использовать HTTP-методы<em>PATCH</em>или<em>PUT</em>. Выбор будет зависеть от того, как происходит обновление. Но HTML позволяет указывать внутри тега<a><form></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>