0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>До сих пор мы встречались только со статическими маршрутами. В них нет изменяемых частей - адрес точно совпадает с маршрутом и не меняется. На практике чаще встречаются динамические маршруты.</p>
1
<p>До сих пор мы встречались только со статическими маршрутами. В них нет изменяемых частей - адрес точно совпадает с маршрутом и не меняется. На практике чаще встречаются динамические маршруты.</p>
2
<p>В этом уроке мы познакомимся с динамическими маршрутами, а также научимся строить маршруты, которые содержат плейсхолдеры.</p>
2
<p>В этом уроке мы познакомимся с динамическими маршрутами, а также научимся строить маршруты, которые содержат плейсхолдеры.</p>
3
<h2>Динамические маршруты</h2>
3
<h2>Динамические маршруты</h2>
4
<p>Чтобы разобраться, как выглядят динамические маршруты, проанализируем адреса некоторых курсов на Хекслете:</p>
4
<p>Чтобы разобраться, как выглядят динамические маршруты, проанализируем адреса некоторых курсов на Хекслете:</p>
5
<ul><li><a>https://ru.hexlet.io/courses/php-introduction-to-oop</a></li>
5
<ul><li><a>https://ru.hexlet.io/courses/php-introduction-to-oop</a></li>
6
<li><a>https://ru.hexlet.io/courses/php-object-oriented-design</a></li>
6
<li><a>https://ru.hexlet.io/courses/php-object-oriented-design</a></li>
7
<li><a>https://ru.hexlet.io/courses/js-react</a></li>
7
<li><a>https://ru.hexlet.io/courses/js-react</a></li>
8
</ul><p>В этих адресах прослеживается определенная структура:<em>/courses/<имя курса></em>. Если предположить, что на каждый такой адрес создается свой маршрут и обработчик, тогда представьте процесс наполнения сайта. Когда будет добавляться каждый новый курс, придется программировать. И хотя курсов у нас не тысячи, такой процесс все равно трудоемок.</p>
8
</ul><p>В этих адресах прослеживается определенная структура:<em>/courses/<имя курса></em>. Если предположить, что на каждый такой адрес создается свой маршрут и обработчик, тогда представьте процесс наполнения сайта. Когда будет добавляться каждый новый курс, придется программировать. И хотя курсов у нас не тысячи, такой процесс все равно трудоемок.</p>
9
<p>То же самое можно сказать и про профили пользователей:<em>/u/<никнейм пользователя></em>. Причем пользователей сотни тысяч и добавляются они на сайт непрерывно без нашего участия.</p>
9
<p>То же самое можно сказать и про профили пользователей:<em>/u/<никнейм пользователя></em>. Причем пользователей сотни тысяч и добавляются они на сайт непрерывно без нашего участия.</p>
10
<p>В примерах выше мы столкнулись с<strong>динамическими маршрутами</strong>. У таких маршрутов внутри изменяемые части, но обработчик у маршрута только один. Например, все указанные выше адреса курсов соответствуют одному маршруту, который можно записать так: /courses/{id}. Где секция {id} означает, что на это место подставляется конкретный<strong>идентификатор курса</strong>- уникальная запись, которая отличает одну сущность от другой.</p>
10
<p>В примерах выше мы столкнулись с<strong>динамическими маршрутами</strong>. У таких маршрутов внутри изменяемые части, но обработчик у маршрута только один. Например, все указанные выше адреса курсов соответствуют одному маршруту, который можно записать так: /courses/{id}. Где секция {id} означает, что на это место подставляется конкретный<strong>идентификатор курса</strong>- уникальная запись, которая отличает одну сущность от другой.</p>
11
<p>Имя изменяемой части можно выбирать произвольно, например, вместо {id} можно написать {lala}. Сам способ записи зависит от конкретного фреймворка. В Flask для этого используются угловые скобки. Это создает ощущение, что используется интерполяция:</p>
11
<p>Имя изменяемой части можно выбирать произвольно, например, вместо {id} можно написать {lala}. Сам способ записи зависит от конкретного фреймворка. В Flask для этого используются угловые скобки. Это создает ощущение, что используется интерполяция:</p>
12
<h2>Плейсхолдеры</h2>
12
<h2>Плейсхолдеры</h2>
13
<p>Любая изменяемая часть маршрута называется<strong>плейсхолдером</strong>- заполнитель. В маршруте выше только один плейсхолдер - id. Доступ к значению конкретного плейсхолдера осуществляется по имени переданного в обработчик аргумента, который должен совпадать с именем плейсхолдера.</p>
13
<p>Любая изменяемая часть маршрута называется<strong>плейсхолдером</strong>- заполнитель. В маршруте выше только один плейсхолдер - id. Доступ к значению конкретного плейсхолдера осуществляется по имени переданного в обработчик аргумента, который должен совпадать с именем плейсхолдера.</p>
14
<p>Для удобства пользователей в адресах стараются использовать не числовые идентификаторы, а текстовые названия. Например, вместо<em>/courses/332</em>показывают<em>/courses/php-mvc</em>. Эту часть адреса называют<a><strong>Slug</strong></a>.</p>
14
<p>Для удобства пользователей в адресах стараются использовать не числовые идентификаторы, а текстовые названия. Например, вместо<em>/courses/332</em>показывают<em>/courses/php-mvc</em>. Эту часть адреса называют<a><strong>Slug</strong></a>.</p>
15
<p>Slug должен быть уникален, а его формат должен соответствовать требованиям формирования адресов. Обычно при составлении этих имен используют символы латинского алфавита с дефисом между ними:<em>this-that-other-outre-collection</em>.</p>
15
<p>Slug должен быть уникален, а его формат должен соответствовать требованиям формирования адресов. Обычно при составлении этих имен используют символы латинского алфавита с дефисом между ними:<em>this-that-other-outre-collection</em>.</p>
16
<p>Flask позволяет в маршруте указать тип данных, которым может быть плейсхолдер как <тип данных</p>
16
<p>Flask позволяет в маршруте указать тип данных, которым может быть плейсхолдер как <тип данных</p>
17
<p>>.</p>
17
<p>>.</p>
18
<p>Количество плейсхолдеров в маршруте может быть больше одного. Обычно такие маршруты используются для вложенных ресурсов:</p>
18
<p>Количество плейсхолдеров в маршруте может быть больше одного. Обычно такие маршруты используются для вложенных ресурсов:</p>
19
<p>Понятия адрес и маршрут обозначают разные вещи. Если маршрут статический, то он всегда совпадает с адресом, например,<em>/about</em>. Если маршрут динамический, то ему могут соответствовать бесконечное число адресов. Такое возможно, даже если таких страниц на сайте нет, например,<em>/courses/</em></p>
19
<p>Понятия адрес и маршрут обозначают разные вещи. Если маршрут статический, то он всегда совпадает с адресом, например,<em>/about</em>. Если маршрут динамический, то ему могут соответствовать бесконечное число адресов. Такое возможно, даже если таких страниц на сайте нет, например,<em>/courses/</em></p>
20
<p>.</p>
20
<p>.</p>