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%!".

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ