JavaRush /Курси /Модуль 3: Django /Практичне створення маршрутів для додатка

Практичне створення маршрутів для додатка

Модуль 3: Django
Рівень 3 , Лекція 9
Відкрита

У цій лекції ми переведемо всі накопичені знання в практику — створимо додаток із повноцінною маршрутизацією.

Приємним бонусом стане те, що після цієї лекції наш додаток почне виглядати як щось, що може бути корисним у реальному житті. А це ж головна мета веб-розробки, правда?

1. Завдання: створення простого застосунку з маршрутами

Ми будемо створювати застосунок для управління книгами в невеликому книжковому магазині. У застосунку будуть маршрути для відображення списку книг і деталей книги, а також для додавання нових книг. Цей міні-проєкт дозволить нам вивчити:

  • Як створювати маршрути та зв'язувати їх із представленнями.
  • Як використовувати динамічні URL.
  • Як організувати маршрути на рівні застосунку.

2. Підготовка: структура проєкту

Перш ніж рухатися вперед, переконаймося, що у нас є встановлений проєкт Django. Якщо ти слідуєш курсу, у тебе вже є проєкт (якщо ні, повернися до лекцій перших рівнів). У рамках цього проєкту створимо новий застосунок:

python manage.py startapp books

Потім зареєструємо застосунок у INSTALLED_APPS у файлі settings.py:

# settings.py
INSTALLED_APPS = [
    ...,
    'books',  # Додаємо наш застосунок
]

3. Додавання маршрутів у застосунку

3.1. Організація файлів

У Django кожен застосунок повинен мати свій власний файл urls.py для маршрутизації. Створимо його у застосунку books:

touch books/urls.py

Структура папок застосунку books буде виглядати так:

books/
    migrations/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    urls.py
    views.py

Тепер додамо у urls.py базову конфігурацію маршрутів:

# books/urls.py
from django.urls import path
from . import views  # Імпортуємо наші представлення

urlpatterns = [
    path('', views.book_list, name='book_list'),  # Відображення списку книг
    path('<int:pk>/', views.book_detail, name='book_detail'),  # Деталі книги
    path('add/', views.book_add, name='book_add'),  # Додавання книги
]

3.2. Підключення маршрутів застосунку до проєкту

Тепер потрібно "включити" маршрути застосунку books у основний конфігураційний файл проєкту urls.py, який знаходиться у папці проєкту:

# project/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('books/', include('books.urls')),  # Підключаємо маршрути застосунку books
]

Використовуючи функцію include(), ми підключаємо маршрути застосунку books до простору URL /books/.

4. Створення представлень у додатку

Тепер створимо кілька представлень для маршрутів, які ми щойно додали в books/urls.py.

4.1. Представлення для списку книг

У файлі views.py додамо функцію book_list, яка буде використовувати HttpResponse для повернення списку книг:

# books/views.py
from django.http import HttpResponse

def book_list(request):
    return HttpResponse("Список всіх книг")

Спробуйте запустити сервер (python manage.py runserver) і відкрити http://127.0.0.1:8000/books/ у браузері. Ви повинні побачити текст "Список всіх книг". Вітаю, ви створили перший маршрут!

4.2. Представлення для деталей книги

Тепер створимо маршрут, який буде обробляти динамічний URL з параметром pk — це ідентифікатор книги з бази даних. Додайте функцію book_detail у файл views.py:

# books/views.py
def book_detail(request, pk):
    return HttpResponse(f"Деталі книги з ID {pk}")

Спробуйте відкрити http://127.0.0.1:8000/books/5/. Ви повинні побачити текст "Деталі книги з ID 5". Цей приклад демонструє, як передавати параметри з URL у представлення.

4.3. Представлення для додавання нової книги

Додамо маршрут для створення нових книг. Припустимо, поки що це буде простий маршрут, який повертає текст:

# books/views.py
def book_add(request):
    return HttpResponse("Додавання нової книги")

Тепер маршрут http://127.0.0.1:8000/books/add/ повинен повертати текст "Додавання нової книги".

5. Реалізація різних сценаріїв маршрутизації

5.1. Використання namespace

Під час роботи з великими проєктами буває корисно групувати маршрути застосунків. Додамо namespace для маршрутів застосунку books.

Змінимо підключення маршрутів у головному urls.py:

# project/urls.py
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('books/', include(('books.urls', 'books'), namespace='books')),  # Додали namespace
]

Тепер маршрути застосунку можна викликати, посилаючись на їх імена через namespace. Наприклад:

# Приклад посилання на маршрут у шаблоні
<a href="{% url 'books:book_list' %}">Список книг</a>

5.2. Динамічні URL та параметри

Ми вже створили маршрут для динамічного URL /<int:pk>/. Але що, якщо ми захочемо додати кілька параметрів? Наприклад, фільтрацію книг за жанром і роком видання.

Змінимо urls.py:

# books/urls.py
urlpatterns = [
    path('', views.book_list, name='book_list'),
    path('<int:pk>/', views.book_detail, name='book_detail'),
    path('add/', views.book_add, name='book_add'),
    path('genre/<str:genre>/year/>int:year>/', views.book_filter, name='book_filter'),
]

І додамо представлення book_filter:

# books/views.py
def book_filter(request, genre, year):
    return HttpResponse(f"Книги жанру {genre} за {year} рік")

Тепер, якщо ви відкриєте http://127.0.0.1:8000/books/genre/fantasy/year/2023/, то побачите: "Книги жанру fantasy за 2023 рік".

6. Перевірка готової маршрутизації

Спробуйте протестувати всі створені маршрути. Ви повинні побачити відповідні відповіді:

  • /books/ — "Список всіх книг".
  • /books/5/ — "Деталі книги з ID 5".
  • /books/add/ — "Додавання нової книги".
  • /books/genre/fantasy/year/2023/ — "Книги жанру fantasy за 2023 рік".

Часті проблеми та їх вирішення

  1. Помилка 404 при спробі зайти на маршрут.

    • Переконайтеся, що ваш маршрут прописаний у потрібному urls.py.
    • Перевірте, що параметри в URL (наприклад, <int:pk>) строго відповідають типам даних.
  2. Не вдається підключити застосунок.

    • Перевірте, чи додано назву застосунку в INSTALLED_APPS у settings.py.
  3. Проблеми з namespace.

    • Переконайтеся, що ви правильно оголосили namespace при підключенні маршрутів застосунку.

В результаті сьогоднішньої роботи у нас з'явився працюючий набір маршрутів для застосунку "Книжковий магазин". Ми зрозуміли, як зв'язувати URL з представленнями, використовувати динамічні параметри та організовувати маршрути на рівні застосунку. Чудова робота, продовжуємо розвивати наш проєкт!

3
Опитування
Динамічні URL, рівень 3, лекція 9
Недоступний
Динамічні URL
Динамічні URL
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ