Lesson 2: Шаблон Model-View-Template (MVT) – Як MVC, але з магією і без головного болю


Lesson2

Lesson 2: Шаблон Model-View-Template (MVT) – Як MVC, але з магією і без головного болю

Привіт знову, кодовий чарівник! 🧙‍♂️ Якщо ти вже тут, то вітаю — ти успішно пройшов Перший Урок (і сподіваюся, не викинув клавіатуру у вікно). Тепер час пірнати глибше у секретну зброю Django: шаблон Model-View-Template (MVT). Це як MVC, але з меншими головними болями і більшою кількістю магії.

Сьогодні на нашому магічному шляху ми також створимо твою першу модель для блог-постів. Наприкінці цього уроку ти вже будеш згинати дані під своїм чарівним жезлом, як справжній маг. 🪄


Крок 1: Активуємо віртуальне середовище (або входимо в чарівницьку печеру)

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

source venv/bin/activate

Тепер ти в чарівному світі, коли бачиш (venv) на початку кожного рядка в терміналі. Це твій особистий Хогвартс для кодування — тільки тут більше Python і менше сов.


Крок 2: Створюємо додаток Blog (бо кожному магу потрібна майстерня)

Тепер, коли ти в магічному світі, час налаштувати додаток blog. Це твоя майстерня, де всі твої чарівні заклинання для блогу оживатимуть. Виконай цю команду, щоб створити додаток:

python3 manage.py startapp blog

Django виконає свою магію і створить каталог blog, де будуть жити всі компоненти — моделі, уявлення, шаблони. Це наче отримати новий чарівний зошит, але з меншою ймовірністю, що він згорить.


Крок 3: Зареєструємо додаток у settings.py (Офіційно включаємо в гру)

Тепер, коли твій додаток blog існує, потрібно повідомити Django про це. Відкрий файл settings.py у своєму проєкті та додай 'blog' до списку INSTALLED_APPS:

INSTALLED_APPS = [
    # Інші встановлені додатки...
    'blog',
]

Тепер твій блог офіційно частина світу Django. Це як додати своє ім’я до реєстру Хогвартса — тільки без додаткових відвідувань кабінету директора.


Крок 4: Створюємо модель BlogPost (Час творити магію)

А ось і найцікавіше! Пора створити модель BlogPost, яка буде представляти всі твої майбутні дописи в блозі. У Django моделі — це магічні креслення для твоїх даних. Відкрий файл models.py у каталозі blog і додай наступний код:

from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.title

Що тут відбувається?

  • title: Поле, де буде зберігатися заголовок допису блогу. Максимум 200 символів, бо всім відомо, що надто довгі заголовки — це просто спосіб показати себе.
  • content: Тіло твого допису. Тут відбуватиметься магія (або виверження твого потоку думок).
  • created_at: Час створення допису. Про це тобі не потрібно піклуватися — Django все зробить за тебе, як невидимий домовик.
  • __str__: Цей метод забезпечує, що Django показуватиме щось корисне, коли буде посилатися на допис. Наприклад, заголовок — бо «Неназваний допис №42» виглядає не так стильно.

Крок 5: Створюємо та застосовуємо міграції (Розкажемо базі даних, що робити)

Тепер, коли ми визначили нашу модель BlogPost, потрібно повідомити про це базу даних. Тут на допомогу приходять міграції. Це як відправка магічних сувоїв базі даних, щоб вона виконала твої накази.

  1. Спершу створимо файл міграції:
python3 manage.py makemigrations

Django відповість чимось на кшталт: “Міграції для ‘blog’: 0001_initial.py” — це означає, що Django зрозумів, що ти від нього хочеш.

  1. Тепер застосовуємо міграцію до бази даних:
python3 manage.py migrate

І voilà! У твоїй базі даних тепер є таблиця для збереження постів блогу. Якщо уважно прислухатися, можна майже почути, як вона шепоче: “Я готова до твоїх мудрих слів (або фото котів)”.


Крок 6: Використовуємо панель адміністратора Django для керування постами (Граємо по-дорослому)

Одна з найкрутіших функцій Django — це панель адміністратора. Це як командна кімната, де ти можеш керувати постами блогу, як маг з армією зачарованих сувоїв.

Спочатку треба зареєструвати модель BlogPost у панелі адміністратора. Відкрий файл admin.py у каталозі blog і додай цей код:

from django.contrib import admin
from .models import BlogPost

admin.site.register(BlogPost)

Тепер запускаємо сервер:

python3 manage.py runserver

І переходимо на http://127.0.0.1:8000/admin/. Якщо ти ще не створив суперкористувача (всемогутній адмін акаунт), зроби це зараз:

python3 manage.py createsuperuser

Django попросить тебе ввести ім’я користувача, email та пароль. Не переживай, не обов’язково використовувати магічний пароль, але переконайся, що він достатньо надійний (наприклад, “nepassword123”).

Після входу ти побачиш модель BlogPost, готову до управління. Тепер ти можеш додавати, редагувати та видаляти дописи блогу кількома кліками — без жодних чарівних паличок.


Крок 7: Відображаємо пости на сайті (Бо яка ж магія, якщо її ніхто не бачить?)

Чудово! Ми створили пости і керуємо ними в панелі адміністратора. Тепер давай виведемо їх на сайт — бо який сенс у блозі, якщо ніхто не бачить твоїх слів (або принаймні мама)?

  1. Додаємо представлення (view): Відкрий файл views.py у каталозі blog і створимо представлення, яке буде отримувати всі пости блогу з бази даних і відправляти їх до шаблону:
from django.shortcuts import render
from .models import BlogPost

def blog_index(request):
    posts = BlogPost.objects.all().order_by('-created_at')
    return render(request, 'blog_index.html', {'posts': posts})
  1. Створюємо шаблон: Усередині каталогу blog створи папку templates (якщо її ще немає). Потім створи файл blog_index.html:
<!DOCTYPE html>
<html>
<head>
    <title>Мій Блог</title>
</head>
<body>
    <h1>Ласкаво просимо на мій блог!</h1>
    <ul>
        {% for post in posts %}
        <li><strong>{{ post.title }}</strong> - {{ post.created_at }}</li>
        <p>{{ post.content }}</p>
        {% endfor %}
    </ul>
</body>
</html>

Цей шаблон буде перебирати всі пости блогу і виводити заголовок, дату і зміст кожного. Коли ти відвідаєш URL блогу, твої пости нарешті будуть видимі світу (або принаймні тим, хто готовий їх читати).


Крок 8: Налаштовуємо urls.py (Магічний шлях)

Тепер підключимо наше нове представлення блогу до проєкту Django. Ти повинен створити шлях URL, щоб коли хтось зайде за певною адресою (наприклад, /blog), Django знав, що треба показати список постів блогу. Тут у гру вступає urls.py.

  1. Створи urls.py для додатка Blog: У каталозі blog створи новий файл під назвою urls.py і додай цей код:
from django.urls import path
from . import views

urlpatterns = [
    path('', views.blog_index, name='blog_index'),
]
  1. Підключаємо URL блогу до головного urls.py: Щоб переконатися, що Django розуміє URL блогу, потрібно додати їх до головного файлу urls.py, що знаходиться у каталозі myblog. Відкрий файл urls.py і відредагуй його так:
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # Додаємо цей рядок для підключення URL блогу
]

Це говорить Django, що потрібно включити всі URL-адреси з додатка blog, коли хтось заходить за адресою /blog/.


Висновок уроку 2

Дивися, як ти впорався! 🎉 Ти створив свій перший додаток у Django, визначив модель для постів блогу, налаштував маршрутизацію URL і відобразив пости на фронтенді. Ти вже майже чарівник Django. 🧙‍♂️

Наступного разу ми перейдемо до додавання форм — бо який же блог без можливості відвідувачам (або ботам) надіслати тобі випадкові повідомлення і коментарі? А до того часу, не забудь похвалитися своєю роботою (і можливо, з’їсти шоколадку за свої досягнення). Ти це заслужив!


See also