1. Аналогия с рестораном: понимаем связь URL, View и Template
Аналогия с рестораном: понимаем связь URL, View и Template
Привет! Если ты только начинаешь путь в Django, то, скорее всего, уже столкнулся с тем, что для отображения одной простой надписи на экране нужно отредактировать сразу несколько файлов. Почему нельзя просто создать hello.html и открыть его? Потому что Django — это мощный веб-фреймворк, а не просто сервер статических файлов.
Сегодня мы разберем фундаментальный механизм Django: MVT (Model-View-Template), но сосредоточимся на самой активной его части — связке URL и View.
Ресторан Django: Как это работает?
Чтобы понять, зачем нам столько файлов, давай представим, что твой сайт — это ресторан.
!Схематичное изображение потока данных: от URL к View и затем к пользователю.
В этой статье мы сосредоточимся на Меню (URLs) и Шеф-поваре (Views). Тарелки (Templates) мы пока заменим на простую салфетку (обычный текст), чтобы понять суть логики.
Маршруты (URLs): Настраиваем меню
Файл urls.py — это входная дверь вашего приложения. Когда пользователь вводит адрес в браузере, Django бежит именно сюда, чтобы понять, что делать.
Типичная запись в urls.py выглядит так:
Разберем функцию path() по косточкам:
* Первый аргумент ('hello/'): Это строчка, которую пользователь пишет в браузере после адреса сайта (например, mysite.com/hello/). Это пункт в меню.
* Второй аргумент (views.say_hello): Это ссылка на функцию-шефа, которую нужно вызвать. Мы говорим: «Если заказали 'hello/', зови шефа say_hello».
* Третий аргумент (name='hello_page'): Это краткое имя для маршрута, чтобы нам было удобно ссылаться на него внутри кода (как код блюда в чеке).
> Важно: В Django принято ставить слеш / в конце URL. Если пользователь введет адрес без слеша, Django (при стандартных настройках) сам перенаправит его на адрес со слешем.
Представления (Views): Работа Шеф-повара
Теперь перейдем в файл views.py. Здесь живут функции, которые принимают заказ и отдают результат.
Минимальная функция-представление (View) обязана делать две вещи:
request (запрос).HttpResponse (ответ).* request: Это вся информация о заказе. Кто пришел, с какого браузера, какие данные передал.
* HttpResponse: Это специальный контейнер, в который мы упаковываем наш текст (или HTML), чтобы отправить его обратно в браузер.
Сквозной пример: Делаем страницу /hello/
Давай соединим всё вместе. Представим, что у тебя уже создан проект и приложение с названием pages.
Шаг 1: Пишем логику (views.py)
Сначала обучим шефа готовить блюдо. Открой pages/views.py:
Шаг 2: Добавляем в меню (urls.py)
Теперь сообщим Django, по какому адресу доступна эта функция. Открой pages/urls.py (если файла нет, создай его):
Шаг 3: Подключаем меню приложения к главному меню
В Django есть главный urls.py (в папке с настройками проекта), который управляет всеми приложениями. Нужно убедиться, что он знает о нашем файле pages/urls.py.
В главном urls.py:
Теперь, если ты запустишь сервер (python manage.py runserver) и перейдешь по адресу http://127.0.0.1:8000/hello/, Django сделает следующее:
hello/ в главном файле.pages.urls.'' (который стыкуется с hello/).views.index.Передача данных: Динамические URL
Часто нам нужно не просто показать статичную страницу, а отобразить что-то конкретное. Например, профиль пользователя. Мы не будем создавать отдельную функцию для Ивана, Марии и Петра. Мы сделаем одну универсальную функцию.
Как это выглядит в URL?
Мы используем специальные скобки < > в urls.py, чтобы сказать Django: «Сюда подставят какое-то значение, поймай его и передай в функцию».
В pages/urls.py добавим новый путь:
Как это выглядит во View?
Теперь наша функция должна принимать не только request, но и ту самую переменную name.
В pages/views.py:
Проверяем
* Заходим на .../hello/user/Ivan/ -> Видим «Привет, Ivan! Рады тебя видеть.»
* Заходим на .../hello/user/Anna/ -> Видим «Привет, Anna! Рады тебя видеть.»
Мы использовали один и тот же код (одного шеф-повара) для обслуживания разных клиентов. В этом и есть магия динамических сайтов.
Итог
request, делает работу и возвращает HttpResponse.<тип:имя_переменной>.В следующей статье мы уберем наши простые текстовые ответы и научимся подключать настоящие HTML-шаблоны, чтобы наш «ресторан» подавал еду на красивых тарелках, а не на салфетках.