JavaRush /Курсы /Модуль 3: Django /Понятие URLConf и маршрутизации

Понятие URLConf и маршрутизации

Модуль 3: Django
3 уровень , 2 лекция
Открыта

Краткое содержание предыдущих лекций

Мы начали наше погружение в мир Django с основ: узнали, как устанавливать Django, настраивать виртуальное окружение, запускать сервер и создавать первый проект. Затем разобрались со структурой проекта и основными командами manage.py. Вы уже создали своё первое приложение, познакомились с представлениями (views) и даже начали их использовать для возврата простых HTTP-ответов. Теперь мы готовы шагнуть на следующую ступень и заглянуть под капот маршрутизации в Django.

1. Что такое URLConf?

Чтобы понять концепцию URLConf, представьте себе почтовую службу (или своего любимого курьера). Каждый раз, когда вы отправляете посылку, вы указываете её адрес. Вот только одно дело доставить посылку до дома, и совсем другое - понять, куда внутри дома она должна попасть: на кухню, в спальню или в кладовку. URLConf — это ваш универсальный план "куда что отправить".

В Django URLConf отвечает за маршрутизацию. Когда вы заходите на сайт и вводите URL, Django обрабатывает ваш запрос и использует URLConf для определения: какое представление (view) должно обработать этот запрос.

Пример: если вы вводите https://example.com/home, ваша URLConf должна решить, какое представление будет обслуживать запрос /home.

2. Как работает URLConf?

URLConf — это обычный модуль Python (мы все их любим, правда?), который содержит список маршрутов для вашего проекта. Каждый маршрут связывает URL-шаблон (например, /home/) с конкретным представлением (например, функцией home_view).

Основной процесс:

  1. Пользователь отправляет запрос по URL.
  2. Django проходит по списку маршрутов в URLConf и ищет первое совпадение.
  3. Когда оно найдено:
    • Django вызывает функцию или класс представления, привязанный к этому маршруту.
    • Представление формирует и возвращает HTTP-ответ.

Если подходящий маршрут не найден, пользователь увидит ошибку 404, что на языке программистов переводится как "Ну как так-то? У нас этого здесь нет!".

3. Организация URLConf

В Django каждый проект имеет один главный файл URLConf — urls.py. Этот файл создаётся автоматически при создании проекта. Однако, как только ваш проект растёт, главный файл URLConf начинает "пухнуть" от количества маршрутов. Чтобы избежать хаоса, маршруты группируются по приложениям, и каждому приложению выделяется свой urls.py.

Главный urls.py проекта

Вот как выглядит базовый пример urls.py, который создаётся по умолчанию в Django-проекте:

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

Теперь добавим сюда маршрут для приветственной страницы:

from django.contrib import admin
from django.urls import path
from myapp.views import home_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home_view),  # Главная страница
]

🔑 Заметьте: urlpatterns — это список, содержащий маршруты. Django будет проверять их по порядку, пока не найдёт подходящее совпадение.

Организация маршрутов в приложении

Каждое приложение может также иметь свой собственный файл urls.py. Вот пример маршрутов для приложения myapp:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home_view, name='home'),
    path('about/', views.about_view, name='about'),
]

Чтобы подключить маршруты приложения в главный urls.py проекта, используйте функцию include:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # Теперь маршруты приложения подтягиваются сюда.
]
Интересный факт:

Django создавался с прицелом на масштабируемость. Разделение маршрутов по приложениям позволяет проекту легко расти, не превращаясь в неуправляемого монстра.

4. Связь URLConf с представлениями

Как только маршрут определяется, Django вызывает представление, которое связано с этим маршрутом. Представление (или view) отвечает за всю логику обработки запроса и формирования ответа.

Пример:

# views.py
from django.http import HttpResponse

def home_view(request):
    return HttpResponse('Добро пожаловать на главную страницу!')

И URLConf:

# urls.py
from django.urls import path
from .views import home_view

urlpatterns = [
    path('', home_view, name='home'),
]
Примечание:

В Django маршруты и представления связаны "намертво". Если вы подключите неверное представление, запросы не будут обрабатываться как нужно.

5. Полезные советы по организации URLConf

  1. Имена маршрутов (names): Всегда давайте имена маршрутам с помощью параметра name. Это позволит вам ссылаться на маршруты в шаблонах или коде без указания полного пути.

    Пример:

    path('about/', about_view, name='about-page')
    

    В шаблоне:

    <a href="{% url 'about-page' %}">О нас</a>
    
  2. Короткие и понятные пути: URL-адреса должны быть короткими и описательными. Например, избегайте маршрутов вроде /product123details/.

  3. Разделение приложений: Если ваше приложение отвечает за конкретную часть сайта (например, блог), все маршруты этого приложения должны быть в его urls.py.

6. Практический пример добавления маршрутов

Теперь создадим небольшое приложение с маршрутизацией. Допустим, у нас есть сайт, где пользователь может посмотреть информацию о компании и её продуктах.

Шаг 1: создаём представления

# views.py
from django.http import HttpResponse

def home_view(request):
    return HttpResponse("Добро пожаловать на наш сайт!")

def about_view(request):
    return HttpResponse("Немного о нашей компании.")

def product_view(request):
    return HttpResponse("Наши продукты.")

Шаг 2: определяем маршруты в приложении

# myapp/urls.py
from django.urls import path
from .views import home_view, about_view, product_view

urlpatterns = [
    path('', home_view, name='home'),
    path('about/', about_view, name='about'),
    path('products/', product_view, name='products'),
]

Шаг 3: подключаем маршруты приложения

# urls.py (главный)
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # Подключаем маршруты из приложения.
]

Теперь вы можете протестировать маршруты:

  • - / — главная страница.
  • - /about/ — информация о компании.
  • - /products/ — список продуктов.

Итоги

URLConf — это сердце маршрутизации в Django. Освоив его, вы сможете управлять запросами как настоящий диспетчер. Планируйте маршруты заранее, используйте include для структурирования, и у вас никогда не будет проблем с масштабируемостью. А если кто-то спросит: "Как Django обрабатывает запросы?", вы сможете с гордостью ответить: "Я знаю это на 100%!".

1
Задача
Модуль 3: Django, 3 уровень, 2 лекция
Недоступна
Создание базового маршрута
Создание базового маршрута
1
Задача
Модуль 3: Django, 3 уровень, 2 лекция
Недоступна
Подключение маршрутов приложения
Подключение маршрутов приложения
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Андрей Уровень 57
13 ноября 2025
в первой задаче условие с проверкой не сопадают. Даже если выбрать "правильное решение", проверка не проходит