Lekcja 2: Model-View-Template (MVT) – Jak MVC, tylko z magią i mniej bólu głowy


Lesson2

Lekcja 2: Model-View-Template (MVT) – Jak MVC, tylko z magią i mniej bólu głowy

Cześć znowu, kodowy czarodzieju! 🧙‍♂️ Jeśli dotarłeś aż tutaj, gratulacje — oficjalnie przeszedłeś Lekcję 1 (i mam nadzieję, że klawiatura przetrwała ten proces). Teraz nadszedł czas, by zanurzyć się w tajną broń Django: wzorzec Model-View-Template (MVT). To coś jak MVC, ale z większą ilością magii i mniejszą ilością bólu głowy.

Podczas dzisiejszej magicznej podróży stworzymy także twój pierwszy model dla postów na blogu. Po tej lekcji będziesz manipulował danymi, jak prawdziwy czarodziej z różdżką w ręku. 🪄


Krok 1: Aktywacja wirtualnego środowiska (czyli wchodzimy do magicznej kryjówki)

Zanim zaczniemy rzucać zaklęcia (czyt. uruchamiać komendy Django), musimy wejść do naszego magicznego schronienia — wirtualnego środowiska. Jeśli jeszcze go nie aktywowałeś, otwórz terminal, przejdź do katalogu swojego projektu i wpisz:

source venv/bin/activate

Kiedy w terminalu zaczniesz widzieć (venv) na początku każdej linii, wiesz, że jesteś w swoim kodowym Hogwarcie — tylko z większą ilością Pythona i mniej sów.


Krok 2: Tworzymy aplikację bloga (Bo każdy czarodziej potrzebuje swojej pracowni)

Teraz, gdy już jesteśmy w magicznej kryjówce, czas na stworzenie aplikacji blog. To będzie twoja czarodziejska pracownia, gdzie twoje blogowe zaklęcia nabiorą życia. Uruchom tę komendę, aby utworzyć aplikację:

python3 manage.py startapp blog

Django wykona swoją magię i stworzy katalog blog, gdzie będą żyły wszystkie składniki potrzebne do stworzenia twojego bloga — modele, widoki, szablony. To tak, jakbyś dostał nowy tom zaklęć, tylko z mniejszą szansą, że spalisz sobie brodę.


Krok 3: Rejestrujemy aplikację w settings.py (czyli oficjalne włączenie do drużyny)

Teraz, kiedy aplikacja blog już istnieje, musimy powiedzieć Django, żeby ją zaakceptowało. Otwórz plik settings.py i dodaj 'blog' do listy INSTALLED_APPS:

INSTALLED_APPS = [
    # Inne zainstalowane aplikacje...
    'blog',
]

Teraz twoja aplikacja blog jest oficjalną częścią rodziny Django. To trochę jak wpisanie swojego imienia na listę uczniów Hogwartu — tylko bez magii ochronnej przed ciotką Petunią.


Krok 4: Tworzymy model BlogPost (czas na prawdziwą magię)

Nadchodzi najciekawsza część! Czas stworzyć model BlogPost, który będzie reprezentować wszystkie przyszłe posty na twoim blogu. W Django modele są jak magiczne plany dla twoich danych. Otwórz plik models.py w katalogu blog i dodaj ten kod:

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

Co tu się dzieje?

  • title: To pole na tytuł posta blogowego. Maksymalna długość to 200 znaków, bo wszyscy wiemy, że zbyt długie tytuły są jak niewyparzony język cioci Jadzi na obiedzie rodzinnym — nikt tego nie potrzebuje.
  • content: Główna treść twojego posta. Tu się dzieje magia, albo przynajmniej twój strumień świadomości.
  • created_at: Data utworzenia posta. Django zajmie się tym automatycznie, jak niewidzialny domowy skrzat.
  • __str__: Ten magiczny kawałek kodu sprawia, że Django wyświetli przyjazną nazwę dla twojego posta — w tym przypadku tytuł, bo “Post #42 bez tytułu” to jak kot bez ogona.

Krok 5: Tworzymy i stosujemy migracje (czyli wyjaśniamy bazie danych, co ma zrobić)

Teraz, kiedy model BlogPost jest już gotowy, musimy wyjaśnić bazie danych, co z tym zrobić. To właśnie migracje robią: są jak magiczne listy, które mówią bazie danych, jak ma zareagować.

  1. Najpierw twórzmy plik migracji:
python3 manage.py makemigrations

Django odpowie czymś w stylu: “Migrations for ‘blog’: 0001_initial.py” — co w języku Django znaczy: “OK, zrozumiałem, co chcesz.”

  1. Następnie zastosujmy migrację w bazie danych:
python3 manage.py migrate

I voilà! Twoja baza danych ma teraz świeżutką tabelę gotową na przechowywanie blogpostów. Gdybyś się wsłuchał, może nawet usłyszałbyś ciche “Jestem gotowa na twoje mądrości (albo zdjęcia kotów)”.


Krok 6: Zarządzamy postami w Django Admin (Pora na grę w stylu wielkiego szefa)

Jedną z najlepszych funkcji Django jest panel administracyjny. To coś jak pokój kontroli, gdzie możesz zarządzać swoimi postami, jak czarodziej dowodzący armią magicznych zwojów.

Ale najpierw musimy zarejestrować model BlogPost w panelu admina. Otwórz admin.py w katalogu blog i dodaj:

from django.contrib import admin
from .models import BlogPost

admin.site.register(BlogPost)

Teraz uruchom serwer:

python3 manage.py runserver

Przejdź na http://127.0.0.1:8000/admin/. Jeśli jeszcze nie stworzyłeś superużytkownika (takiego admina wszechmocnego), zrób to teraz:

python3 manage.py createsuperuser

Django poprosi cię o podanie nazwy użytkownika, e-maila i hasła. Nie martw się, nie musisz używać zaklęcia, po prostu wymyśl coś bezpiecznego (może nie “hasło123”).

Zaloguj się, a zobaczysz model BlogPost, gotowy do zarządzania. Teraz możesz dodawać, edytować i usuwać posty blogowe jednym kliknięciem — bez żadnej różdżki.


Krok 7: Wyświetlamy posty na stronie (Bo co to za magia, której nikt nie widzi?)

Świetnie! Mamy już posty, zarządzamy nimi w panelu admina, ale teraz czas pokazać je światu — bo jaki sens ma blog, jeśli nikt nie zobaczy twojej twórczości (nawet mama)?

  1. Dodajemy widok: Otwórz views.py w katalogu blog i stwórzmy widok, który pobierze wszystkie posty z bazy danych i prześle je do szablonu:
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. Tworzymy szablon: W katalogu blog stwórz folder templates (jeśli jeszcze go nie ma). Następnie utwórz plik blog_index.html:
<!DOCTYPE html>
<html>
<head>
    <title>Mój Blog</title>
</head>
<body>
    <h1>Witamy na moim blogu!</h1>
    <ul>
        {% for post in posts %}
        <li><strong>{{ post.title }}</strong> - {{ post.created_at }}</li>
        <p>{{ post.content }}</p>
        {% endfor %}
    </ul>
</body>
</html>

Ten szablon będzie wyświetlał tytuł, datę i treść każdego posta. Gdy odwiedzisz stronę bloga, twoje posty w końcu ujrzą światło dzienne (lub, wiesz, chociaż ekran twojego laptopa).


Krok 8: Konfiguracja urls.py (Magiczny szlak)

Teraz połączmy nasz nowy widok bloga z projektem Django. Potrzebujemy utworzyć trasę URL, aby gdy ktoś odwiedzi konkretny adres (np. /blog), Django wiedziało, co pokazać.

  1. Tworzymy urls.py dla bloga: W katalogu blog stwórz nowy plik o nazwie urls.py i dodaj ten kod:
from django.urls import path
from . import views

urlpatterns = [
    path('', views.blog_index, name='blog_index'),
]
  1. Dodajmy URL bloga do głównego urls.py: Aby Django rozpoznało URL bloga, musimy dodać go do głównego pliku urls.py, który znajdziesz w katalogu myblog. Otwórz ten plik i zmodyfikuj go w ten sposób:
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # Dodajemy blog
]

To mówi Django, żeby włączyć wszystkie URL-e z aplikacji blog, gdy ktoś odwiedzi /blog/.


Zakończenie lekcji 2

Brawo! 🎉 Stworzyłeś swoje pierwsze Django app, zdefiniowałeś model postów na blogu, ustawiłeś trasy URL i wyświetliłeś posty na stronie. Teraz jesteś jak prawdziwy mistrz Django! 🧙‍♂️

W następnej lekcji dodamy formularze — bo co to za blog bez możliwości komentowania lub wysyłania wiadomości do autora? Do tego czasu, ciesz się swoją pracą (i może zasłuż na kawałek ciasta). Naprawdę na to zasłużyłeś!


Zobacz też