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>