В предыдущем уроке мы создали проект Cinemahub и добавили в него первое приложение — movies.
Теперь пришло время сделать важный шаг: научить наш сайт отвечать на запросы пользователей.
Другими словами — настроить маршруты (пути) и написать первые функции представления, которые будут обрабатывать запросы и возвращать ответ.
Когда пользователь открывает страницу сайта, он отправляет запрос. Django получает этот запрос и передаёт его функции представления (view). Эта функция решает, что именно нужно показать пользователю — текст, HTML-страницу, данные из базы и т. д.
Создадим первую функцию представления для приложения movies.
Откройте файл movies/views.py и добавьте код:
# movies/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Главная страница приложения Movies.")Что здесь происходит:
request— это объект, содержащий информацию о запросе пользователя (например, метод, параметры, cookies и сессии).HttpResponse— это ответ, который сервер отправляет обратно в браузер.- Текст внутри
HttpResponse()и есть то, что увидит пользователь.
Теперь Django нужно “сказать”, по какому адресу открывать эту страницу.
Для этого нужно добавить маршрут (path) в файл urls.py.
Откройте файл cinemahub/urls.py и измените его так:
# cinemahub/urls.py
from django.contrib import admin
from django.urls import path
from movies.views import index
urlpatterns = [
path('admin/', admin.site.urls),
path('movies/', index),
]Разберём:
'movies/'— это часть адреса, по которой будет открываться страница (http://127.0.0.1:8000/movies/).index— это наша функция представления, которую мы импортировали изmovies/views.py.
Запустите сервер разработки:
python manage.py runserverТеперь откройте в браузере адрес:
http://127.0.0.1:8000/movies/
Если вы всё сделали правильно, появится надпись:
Главная страница приложения Movies.
Поздравляем 🎉 — вы только что написали и запустили своё первое представление Django!
Пока что мы обращаемся к адресу /movies/.
Но логично, чтобы при переходе на главную страницу (http://127.0.0.1:8000/) тоже что-то отображалось.
Для этого можно добавить ещё один маршрут.
Откройте cinemahub/urls.py и измените код:
# cinemahub/urls.py
from django.contrib import admin
from django.urls import path
from movies import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index), # Главная страница
path('movies/', views.index),
]Теперь при переходе по адресу http://127.0.0.1:8000/ отобразится та же страница.
Пока все маршруты хранятся в одном файле cinemahub/urls.py, и со временем он может разрастись.
Поэтому в Django принято выносить маршруты внутрь приложений, чтобы каждый модуль имел свой собственный urls.py.
Сделаем так для нашего приложения movies.
Изменим главный файл cinemahub/urls.py:
# cinemahub/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('movies/', include('movies.urls')), # Подключаем маршруты приложения
]Теперь создайте в папке movies/ новый файл urls.py и добавьте туда код:
# movies/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
path('genres/', views.genres), # Страница с жанрами фильмов (пока заглушка)
]И добавим вторую функцию в views.py:
# movies/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Добро пожаловать в Cinemahub!")
def genres(request):
return HttpResponse("Страница с жанрами фильмов.")Теперь маршруты вашего приложения полностью автономны.
Запустите сервер (если он ещё не работает):
python manage.py runserverИ проверьте:
- Главная страница приложения: http://127.0.0.1:8000/movies/
- Страница жанров: http://127.0.0.1:8000/movies/genres/
Вы должны увидеть наши тестовые тексты. Позже эти функции будут возвращать не просто строки, а полноценные HTML-шаблоны и данные из базы.
| Файл | Назначение |
|---|---|
| movies/views.py | Хранит функции представления — логику обработки запросов |
| cinemahub/urls.py | Главный маршрутизатор проекта (подключает приложения) |
| movies/urls.py | Локальные маршруты приложения movies |
Таким образом, каждое приложение в Django имеет свою зону ответственности, а проект остаётся структурированным и понятным.
- Что делает функция представления (view) в Django?
- Для чего нужен файл
urls.py? - Чем отличается главный
urls.pyот файла маршрутов приложения? - Что такое объект
request? - Что возвращает функция представления?
- Зачем нужен
include()? - Что произойдёт, если не зарегистрировать маршруты приложения?
- Где можно увидеть результат работы функции представления?
- Почему полезно выносить маршруты в отдельные файлы приложений?
- Какой адрес будет соответствовать маршруту
path('movies/genres/', views.genres)?