HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Практически всю веб-разработку можно свести к<a>CRUD-операциям</a>. CRUD - широко распространенный термин, который означает четыре стандартные операции над любой сущностью. В этом уроке познакомимся с CRUD-операциями, которые считаются типичными для веб-разработки.</p>
1 <p>Практически всю веб-разработку можно свести к<a>CRUD-операциям</a>. CRUD - широко распространенный термин, который означает четыре стандартные операции над любой сущностью. В этом уроке познакомимся с CRUD-операциями, которые считаются типичными для веб-разработки.</p>
2 <h2>Операции CRUD</h2>
2 <h2>Операции CRUD</h2>
3 <p><strong>CRUD</strong>- это акроним, который обозначает четыре операции над сущностями веб-разработки по первым буквам их названий:</p>
3 <p><strong>CRUD</strong>- это акроним, который обозначает четыре операции над сущностями веб-разработки по первым буквам их названий:</p>
4 <ul><li><strong>Create</strong>- создание</li>
4 <ul><li><strong>Create</strong>- создание</li>
5 <li><strong>Read</strong>- чтение</li>
5 <li><strong>Read</strong>- чтение</li>
6 <li><strong>Update</strong>- обновление</li>
6 <li><strong>Update</strong>- обновление</li>
7 <li><strong>Delete</strong>- удаление</li>
7 <li><strong>Delete</strong>- удаление</li>
8 </ul><p>Например, в случае с пользователем можно составить такое соответствие:</p>
8 </ul><p>Например, в случае с пользователем можно составить такое соответствие:</p>
9 <p><strong>Create</strong></p>
9 <p><strong>Create</strong></p>
10 <ul><li>Регистрация</li>
10 <ul><li>Регистрация</li>
11 </ul><p><strong>Read</strong></p>
11 </ul><p><strong>Read</strong></p>
12 <ul><li>Просмотр профиля пользователями сайта</li>
12 <ul><li>Просмотр профиля пользователями сайта</li>
13 <li>Просмотр пользователя в административном интерфейсе</li>
13 <li>Просмотр пользователя в административном интерфейсе</li>
14 </ul><p><strong>Update</strong></p>
14 </ul><p><strong>Update</strong></p>
15 <ul><li>Обновление личных данных</li>
15 <ul><li>Обновление личных данных</li>
16 <li>Смена емейла</li>
16 <li>Смена емейла</li>
17 <li>Смена пароля</li>
17 <li>Смена пароля</li>
18 </ul><p><strong>Delete</strong></p>
18 </ul><p><strong>Delete</strong></p>
19 <ul><li>Удаление</li>
19 <ul><li>Удаление</li>
20 </ul><p>Так же можно расписать действия над любыми другими ресурсами: фотографиями пользователя, его друзьями, сообщениями.</p>
20 </ul><p>Так же можно расписать действия над любыми другими ресурсами: фотографиями пользователя, его друзьями, сообщениями.</p>
21 <p>Создание полного круда включает в себя следующие действия:</p>
21 <p>Создание полного круда включает в себя следующие действия:</p>
22 <ul><li>Создание сущности в коде</li>
22 <ul><li>Создание сущности в коде</li>
23 <li>Добавление таблицы в базу</li>
23 <li>Добавление таблицы в базу</li>
24 <li>Написание тестов на обработчики</li>
24 <li>Написание тестов на обработчики</li>
25 <li>Добавление обработчиков</li>
25 <li>Добавление обработчиков</li>
26 <li>Добавление шаблонов</li>
26 <li>Добавление шаблонов</li>
27 </ul><p>Новички тратят на создание такого круда не один день. У опытного разработчика в прокачанном фреймворке этот процесс занимает максимум часы. Flask, как и другие микрофреймворки, не предоставляет средств автоматизации, поэтому придется многое делать руками. В целях обучения это оправданно, но в промышленной разработке, это должно быть автоматизировано.</p>
27 </ul><p>Новички тратят на создание такого круда не один день. У опытного разработчика в прокачанном фреймворке этот процесс занимает максимум часы. Flask, как и другие микрофреймворки, не предоставляет средств автоматизации, поэтому придется многое делать руками. В целях обучения это оправданно, но в промышленной разработке, это должно быть автоматизировано.</p>
28 <p>Дальше мы разберем весь процесс создания круда на примере каталога школ программирования за исключением работы с базой данных и тестов. Начнем с роутинга. Полный круд включает минимум семь маршрутов. Их может быть больше, так как любое из действий может повторяться не один раз:</p>
28 <p>Дальше мы разберем весь процесс создания круда на примере каталога школ программирования за исключением работы с базой данных и тестов. Начнем с роутинга. Полный круд включает минимум семь маршрутов. Их может быть больше, так как любое из действий может повторяться не один раз:</p>
29 <p>Такое соглашение изначально появилось в Rails и затем было адаптировано во многих фреймворках на языках отличных от Ruby.</p>
29 <p>Такое соглашение изначально появилось в Rails и затем было адаптировано во многих фреймворках на языках отличных от Ruby.</p>
30 <p>В этом уроке мы разберем первые два маршрута: просмотр списка и конкретного ресурса. Остальные рассмотрим в следующих уроках.</p>
30 <p>В этом уроке мы разберем первые два маршрута: просмотр списка и конкретного ресурса. Остальные рассмотрим в следующих уроках.</p>
31 <h3>Нейминг</h3>
31 <h3>Нейминг</h3>
32 <p>В Flask, как в микрофреймворке, нет строгих правил по именованию обработчиков. В других же более автоматизированных фреймворках заготовки обработчиков могут и вовсе создаваться сами.</p>
32 <p>В Flask, как в микрофреймворке, нет строгих правил по именованию обработчиков. В других же более автоматизированных фреймворках заготовки обработчиков могут и вовсе создаваться сами.</p>
33 <p>В этом курсе мы будем придерживаться ресурсного наименования обработчиков. То есть название обработчика будет состоять из множественного имени сущности (users, courses) и действия (index, show, post).</p>
33 <p>В этом курсе мы будем придерживаться ресурсного наименования обработчиков. То есть название обработчика будет состоять из множественного имени сущности (users, courses) и действия (index, show, post).</p>
34 <p>К примеру, обработчик, выводящий список пользователей, будет users_index(), а выводящий конкретного пользователя - users_show().</p>
34 <p>К примеру, обработчик, выводящий список пользователей, будет users_index(), а выводящий конкретного пользователя - users_show().</p>
35 <h3>Список (index)</h3>
35 <h3>Список (index)</h3>
36 <p>Общий алгоритм вывода списка всегда проходит по одному сценарию и не зависит от языка программирования:</p>
36 <p>Общий алгоритм вывода списка всегда проходит по одному сценарию и не зависит от языка программирования:</p>
37 <ol><li>Извлекаем список из базы данных. Обычно с учетом пейджинга</li>
37 <ol><li>Извлекаем список из базы данных. Обычно с учетом пейджинга</li>
38 <li>Передаем данные в шаблон</li>
38 <li>Передаем данные в шаблон</li>
39 <li>Выводим данные в шаблоне, используя цикл</li>
39 <li>Выводим данные в шаблоне, используя цикл</li>
40 </ol><p>Обычно в этот список добавляют различные действия, которые можно выполнять над сущностями. Например, редактирование, удаление или просмотр.</p>
40 </ol><p>Обычно в этот список добавляют различные действия, которые можно выполнять над сущностями. Например, редактирование, удаление или просмотр.</p>
41 <p><strong>Обработчик</strong></p>
41 <p><strong>Обработчик</strong></p>
42 <p><strong>Шаблон</strong></p>
42 <p><strong>Шаблон</strong></p>
43 <h3>Отображение (show)</h3>
43 <h3>Отображение (show)</h3>
44 <p>Это страница, на которой описана конкретная сущность. Например, на Хекслете к таким страницам относятся: профиль пользователя, страница курса, страница профессии, страница урока. Как и в случае со списком, порядок действий для отображения всегда один и тот же:</p>
44 <p>Это страница, на которой описана конкретная сущность. Например, на Хекслете к таким страницам относятся: профиль пользователя, страница курса, страница профессии, страница урока. Как и в случае со списком, порядок действий для отображения всегда один и тот же:</p>
45 <ol><li>Из адреса извлекается идентификатор сущности</li>
45 <ol><li>Из адреса извлекается идентификатор сущности</li>
46 <li>Выполняется поиск сущности в хранилище</li>
46 <li>Выполняется поиск сущности в хранилище</li>
47 <li>Она передается в шаблон</li>
47 <li>Она передается в шаблон</li>
48 <li>В шаблоне рисуется красивый вывод</li>
48 <li>В шаблоне рисуется красивый вывод</li>
49 </ol><p><strong>Обработчик</strong></p>
49 </ol><p><strong>Обработчик</strong></p>
50 <p><strong>Шаблон</strong></p>
50 <p><strong>Шаблон</strong></p>
51 <p>Если сущность была удалена или ее вообще не существовало, то с точки зрения HTTP такой адрес сайта должен вернуть HTTP-код 404. Правильным способом будет использовать функцию abort - она сгенерирует указанную ошибку. Если в нашем приложении также есть обработчки ошибок, то он выведет шаблон на перехваченную ошибку:</p>
51 <p>Если сущность была удалена или ее вообще не существовало, то с точки зрения HTTP такой адрес сайта должен вернуть HTTP-код 404. Правильным способом будет использовать функцию abort - она сгенерирует указанную ошибку. Если в нашем приложении также есть обработчки ошибок, то он выведет шаблон на перехваченную ошибку:</p>
52 <h2>Заключение</h2>
52 <h2>Заключение</h2>
53 <p>Мы познакомились с CRUD-операциями, которые считаются типичными для веб-разработки: создание, чтение, обновление и удаление. Также мы подробно разобрали первые два маршрута: просмотр списка и конкретного ресурса. Далее рассмотрим остальные.</p>
53 <p>Мы познакомились с CRUD-операциями, которые считаются типичными для веб-разработки: создание, чтение, обновление и удаление. Также мы подробно разобрали первые два маршрута: просмотр списка и конкретного ресурса. Далее рассмотрим остальные.</p>