Проектирование структуры адресов
В бесплатном курсе по Django вы познакомились с последовательностью обработки запросов. Теперь в эту последовательность можно добавить работу с классами и моделями, и алгоритм будет выглядеть так:
- Данные проекта хранятся в БД.
- Для взаимодействия с БД в коде создаются модели.
- Пользователь обращается к какой-то странице сайта, Django сверяет запрошенный адрес с шаблонами адресов в файле
urls.py. - Каждый шаблон адреса в
urls.py связан с определённой функцией или классом, которые обрабатывают входящие данные. Такие функции (или классы) называются View. - View обращается к моделям и через них получает необходимые данные из БД. Эти данные View передает в шаблоны (Template).
- Данные выводятся в шаблон и генерируется HTML-документ, который возвращается пользователю.
Структуру адресов страниц придумывают ещё на стадии проектирования сайта. Она — исключительно плод фантазии и логики разработчика.
Для проекта Yatube структура может быть такой:
"" — главная страница с лентой новых постов пользователей."/<имя пользователя>" — страница с постами пользователя. Например, адресом личной страницы пользователя Лев Толстой (его логин — leo) будет /leo."/<имя пользователя>/<pk поста>" — адрес страницы отдельного поста, где pk — идентификатор поста, первичный ключ записи в БД. В адресе мы «вкладываем» идентификатор поста в аккаунт автора. Страница с первой записью Льва будет иметь адрес /leo/1, а запись с pk=3, которую создал пользователь Антон, получит адрес /anton/3 Теперь по ссылке можно понять, какому автору принадлежит определённый пост. Это информативнее и удобнее, чем адреса вида /post/1 или post/3 (хотя технически можно сделать и так).
Для начала хватит, а в дальнейшем мы добавим и другие адреса.
Разработаем структуру адресов для магазина shop.ex. Адреса в списке построены по разной логике (на примере товара «product_name» и пользователя с логином user_name). Но один адрес выпадает из всякой логики. Какой?
Скопировать кодPYTHON
urlpatterns = [
path('', views.index),
path('user', views.account),
path('user/1', views.user_first),
path('user/<int:user-id>', views.user_page),
path('user/2', views.user_second),
path('user/login', views.login),
path('user/logout', views.logout),
]
Что-то не так в этом urls.py: часть перечисленных path() никогда не сработают. Какие и почему?