HTML Diff
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/&lt;имя курса&gt;</em>. Если предположить, что на каждый такой адрес создается свой маршрут и обработчик, тогда представьте процесс наполнения сайта. Когда будет добавляться каждый новый курс, придется программировать. И хотя курсов у нас не тысячи, такой процесс все равно трудоемок.</p>
8 </ul><p>В этих адресах прослеживается определенная структура:<em>/courses/&lt;имя курса&gt;</em>. Если предположить, что на каждый такой адрес создается свой маршрут и обработчик, тогда представьте процесс наполнения сайта. Когда будет добавляться каждый новый курс, придется программировать. И хотя курсов у нас не тысячи, такой процесс все равно трудоемок.</p>
9 <p>То же самое можно сказать и про профили пользователей:<em>/u/&lt;никнейм пользователя&gt;</em>. Причем пользователей сотни тысяч и добавляются они на сайт непрерывно без нашего участия.</p>
9 <p>То же самое можно сказать и про профили пользователей:<em>/u/&lt;никнейм пользователя&gt;</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 позволяет в маршруте указать тип данных, которым может быть плейсхолдер как &lt;тип данных</p>
16 <p>Flask позволяет в маршруте указать тип данных, которым может быть плейсхолдер как &lt;тип данных</p>
17 <p>&gt;.</p>
17 <p>&gt;.</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>