Сьогодні ми розберемося в основних компонентах Django, які роблять цей фреймворк таким магічним і корисним. А в самому кінці лекції ви зрозумієте: нічого магічного тут немає — лише добре продумана структура.
Уявіть собі Django як ковальський інструмент для веб-розробки. Щоб створити веб-додаток, ви повинні розуміти, з яких частин складається цей інструмент, як вони взаємодіють між собою. Це не тільки допоможе вам писати код ефективніше, але й убереже від типових помилок. Рухаючись вперед, розуміння цих принципів дозволить вам створювати гнучкі, масштабовані додатки, які відповідають принципу DRY (Don’t Repeat Yourself).
Тож пристібайтесь, друзі, ми вирушаємо в тур по ключових компонентах Django!
Архітектурний підхід Django: MTV
Ви напевно чули про MVC (Model-View-Controller) — один із найпопулярніших архітектурних патернів для побудови застосунків. Django використовує його адаптовану версію, яку називає MTV (Model-Template-View).
Ось коротке співставлення MTV з MVC:
| MVC | MTV |
|---|---|
| Model | Model |
| View | Template |
| Controller | View |
Детальніше:
- Model: працює з даними, описує структуру бази даних і надає API для їх обробки.
- Template: відповідає за відображення даних користувачу. Тут ми визначаємо, як наші сторінки виглядають.
- View: логіка обробки запитів. Саме тут відбувається магія зв'язування моделей і шаблонів.
Основні компоненти Django
Тепер, коли ми знаємо про MTV, давайте розглянемо ключові елементи, які відіграють найважливішу роль у кожному Django-додатку.
1. Моделі (Models)
Моделі — це основа взаємодії з базою даних. У Django моделі визначаються у файлі models.py всередині кожного додатку. Кожен клас моделі трансформується в таблицю в базі даних.
Приклад моделі:
from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length=100) # Текстове поле з обмеженням довжини
content = models.TextField() # Велике текстове поле
author = models.CharField(max_length=50) # Автор поста
created_at = models.DateTimeField(auto_now_add=True) # Дата створення
def __str__(self):
return self.title # Для зручного відображення в адмінці
Чому це важливо? Кожного разу, коли ви працюєте з даними (додаєте, змінюєте, видаляєте), ви взаємодієте з моделями. Вони — основа для всієї логіки роботи з даними.
2. Представлення (Views)
Представлення у Django — це "контролери" між користувачем і вашою бізнес-логікою. Тут відбувається обробка запитів і передача даних у шаблони.
Приклад функції представлення:
from django.http import HttpResponse
def homepage(request):
return HttpResponse("Ласкаво просимо на наш сайт!")
Приклад трохи складніше, що повертає HTML-шаблон:
from django.shortcuts import render
def homepage(request):
context = {"greeting": "Ласкаво просимо на наш сайт!"}
return render(request, 'home.html', context)
Помічаєте, як шаблон і представлення взаємодіють одне з одним? Це ключ.
3. Шаблони (Templates)
Шаблони керують фронтендом: HTML, CSS і, можливо, трохи JavaScript. Django пропонує власну мову шаблонів — Django Template Language (DTL).
Приклад шаблону home.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Головна</title>
</head>
<body>
<h1>{{ greeting }}</h1>
</body>
</html>
Все, що знаходиться у подвійних фігурних дужках {{ }}, це плейсхолдери для даних, переданих із представлення.
4. Маршрутизація (URLs)
Коли користувач заходить на сайт, він бачить URL-адресу в браузері. Наприклад, www.myblog.com/home. Django має "зрозуміти", як обробити цей запит. Для цього ми створюємо маршрути у файлі urls.py.
Приклад файлу urls.py:
from django.urls import path
from . import views # Імпортуємо наші представлення
urlpatterns = [
path('', views.homepage, name='homepage'), # Пов'язуємо маршрут із функцією homepage
]
5. Адмін-панель (Admin)
Django надає вбудовану зручну адмін-панель, яка дозволяє керувати контентом, не звертаючись до SQL. Щоб працювати з моделлю в адмінці, її потрібно зареєструвати.
Приклад реєстрації моделі у admin.py:
from django.contrib import admin
from .models import BlogPost
admin.site.register(BlogPost)
Це додасть можливість керувати записами моделі BlogPost в адмінці.
6. Файли налаштувань (Settings)
Файл settings.py містить конфігурацію вашого проєкту: бази даних, налаштування статичних файлів, параметри безпеки. Ось як це виглядає:
Приклад:
DEBUG = True # Увімкнений режим відладки
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / "db.sqlite3",
}
}
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # Додаємо наш додаток "blog"
]
7. Статичні файли (Static Files)
Ваші CSS-, JS-, та зображення потрапляють у категорію "статичних файлів". Django надає механізми для їх управління через STATIC_URL і STATICFILES_DIRS.
Приклад:
STATIC_URL = '/static/' # Основний шлях для статичних файлів
STATICFILES_DIRS = [
BASE_DIR / "static", # Папка, де будуть зберігатися статичні файли
]
8. Міграції
Міграції — це механізм синхронізації моделей із базою даних. При створенні або зміні моделі Django генерує міграцію, яка потім застосовується до бази даних.
Приклад:
# Створення міграції
python manage.py makemigrations
# Застосування міграції
python manage.py migrate
Приклад взаємодії компонентів
Давайте зберемо все разом:
- Створюємо модель
BlogPost. - Реєструємо її в адмінці.
- Пишемо функцію представлення, щоб вивести список постів.
- Додаємо маршрут у
urls.py. - Пишемо шаблон для відображення постів.
Функція представлення:
from django.shortcuts import render
from .models import BlogPost
def blog_posts(request):
posts = BlogPost.objects.all() # Отримуємо всі пости
return render(request, 'blog_posts.html', {'posts': posts})
Шаблон blog_posts.html:
<!DOCTYPE html>
<html>
<head>
<title>Наші пости</title>
</head>
<body>
<h1>Список постів</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }} - {{ post.author }}</li>
{% endfor %}
</ul>
</body>
</html>
Маршрут:
from django.urls import path
from . import views
urlpatterns = [
path('posts/', views.blog_posts, name='blog_posts'),
]
Тепер можна перейти за адресою /posts/ і побачити ваші записи, гарно відрендерені у браузері.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ