Коли ми створюємо застосунок в Django, важливо правильно організувати всі його компоненти. Це як побудувати хороший дім — кожна кімната має виконувати свою функцію, а разом вони утворюють зручне житло.
У Django є три ключових компоненти, які працюють разом: моделі (models) для збереження даних, представлення (views) для обробки запитів і маршрути (urls) для спрямування користувачів. Сьогодні ми розберемо, як ці компоненти взаємодіють і створимо простий, але повноцінний застосунок блогу.
Для початку давайте подивимось, як зазвичай влаштований застосунок у Django і що робить кожен файл у цій структурі.
Таймлайн структури застосунку в Django
Типова структура застосунку виглядає так:
my_project/
|-- my_app/
|-- migrations/
|-- templates/
|-- static/
|-- __init__.py
|-- admin.py
|-- apps.py
|-- models.py
|-- tests.py
|-- urls.py
|-- views.py
Давайте розберемо ролі кожного компонента в структурі.
migrations/: папка, де Django зберігає файли міграцій для синхронізації ваших моделей з базою даних.templates/: тут живуть HTML-шаблони для рендеру сторінок.static/: місце для CSS, JavaScript та інших статичних файлів.admin.py: конфігурація для Django Admin, де ви можете зареєструвати свої моделі.apps.py: файл конфігурації застосунку (створюється автоматично).models.py: тут ми оголошуємо моделі застосунку.tests.py: файл для написання unit-тестів.urls.py: тут описуються маршрути застосунку.views.py: тут живе логіка обробки запитів і повернення даних.
Побудова структури для додатку "Блог"
Ми вже створювали додаток "Блог", можете використати його. Але на всяк випадок коротко повторимо основні кроки. Ми використовуємо моделі, представлення (views) і маршрути (urls), щоб об'єднати все в єдине ціле.
Крок 1: Створення додатку
Спочатку створимо новий додаток:
python manage.py startapp blog
Тепер додайте додаток у INSTALLED_APPS файлу settings.py:
INSTALLED_APPS = [
...
'blog',
...
]
Крок 2: Створюємо моделі для додатку
Зазирнемо у файл models.py нашого додатку і додамо наступні моделі:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
bio = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
categories = models.ManyToManyField(Category)
def __str__(self):
return self.title
Тут ми описали три моделі:
- Author: для зберігання інформації про авторів статей.
- Category: для класифікації статей.
- Article: для збереження контенту статей, з прив'язкою до автора (через
ForeignKey) і категорій (черезManyToManyField).
Крок 3: Створюємо міграції
Після створення моделей, не забудьте виконати міграції, щоб зміни застосувалися до бази даних:
# Створюємо файл міграції
python manage.py makemigrations
# Застосовуємо міграції
python manage.py migrate
Крок 4: Створення представлень (views)
Тепер ми перейдемо до написання представлень у файлі views.py. Представлення — це місце, де ми обробляємо запити і повертаємо відповіді.
Додамо кілька простих представлень:
from django.http import HttpResponse
from django.shortcuts import render
from .models import Article
def home(request):
return HttpResponse("Ласкаво просимо в блог!")
def article_list(request):
articles = Article.objects.all()
return render(request, 'blog/article_list.html', {'articles': articles})
def article_detail(request, pk):
article = Article.objects.get(pk=pk)
return render(request, 'blog/article_detail.html', {'article': article})
home: просте представлення, яке повертає текстову відповідь.article_list: вивід списку всіх статей.article_detail: вивід детальної інформації про одну статтю.
Крок 5: налаштування маршрутів (urls.py)
Тепер створимо маршрути для нашого додатку. Для цього створимо файл urls.py у папці додатку blog:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('articles/', views.article_list, name='article_list'),
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
]
path('', views.home): зв'язує корінь маршруту додатку з представленнямhome.path('articles/'): зв'язує шлях/articles/з представленнямarticle_list.path('articles/<int:pk>/'): зв'язує шлях/articles/{id}з представленнямarticle_detail.
Не забудьте підключити маршрути додатку в основному urls.py проєкту:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
Маршрут blog/ буде обробляти всі запити, що починаються з /blog.
Крок 6: Шаблони (templates)
Створимо папку templates/blog у директорії додатку і додамо два файли:
article_list.html:
<h1>Список статей</h1>
<ul>
{% for article in articles %}
<li><a href="/blog/articles/{{ article.id }}/">{{ article.title }}</a></li>
{% endfor %}
</ul>
article_detail.html:
<h1>{{ article.title }}</h1>
<p><strong>Автор:</strong> {{ article.author.name }}</p>
<p><strong>Контент:</strong> {{ article.content }}</p>
<p><strong>Опубліковано:</strong> {{ article.published_date }}</p>
Ці шаблони рендерять HTML-сторінки для списку статей і детальної інформації про статтю.
Крок 7: Оживляємо додаток
Тепер наш додаток "Блог" готовий до запуску. Запустіть сервер командою:
python manage.py runserver
Відкрийте браузер на http://127.0.0.1:8000/blog/articles/ — ви повинні побачити список статей з бази даних. Клікніть на будь-яку статтю, щоб переглянути її деталі.
Практичне завдання
- Додайте нове представлення для відображення списку авторів.
- Створіть маршрут для нового представлення.
- Напишіть відповідний шаблон для відображення авторів.
- Подумайте, як можна покращити структуру коду додатка (наприклад, додавши розділення на модулі).
Вітаю, ви щойно освоїли одну з ключових концепцій Django — організацію додатка! Тепер ваш код стає більш структурованим і готовим до розширення.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ