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ć.
- 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.”
- 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)?
- Dodajemy widok: Otwórz
views.py
w katalogublog
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})
- Tworzymy szablon: W katalogu
blog
stwórz foldertemplates
(jeśli jeszcze go nie ma). Następnie utwórz plikblog_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ć.
- Tworzymy
urls.py
dla bloga: W katalogublog
stwórz nowy plik o nazwieurls.py
i dodaj ten kod:
from django.urls import path
from . import views
urlpatterns = [
path('', views.blog_index, name='blog_index'),
]
- Dodajmy URL bloga do głównego
urls.py
: Aby Django rozpoznało URL bloga, musimy dodać go do głównego plikuurls.py
, który znajdziesz w katalogumyblog
. 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ż
- Lekcja 6: Profile Użytkowników – Bo Każdy Zasługuje na Chwilę Sławy!
- Lekcja 5: Rejestracja użytkowników — Bo tylko zasłużeni mogą komentować!
- Lekcja 4: Autoryzacja użytkowników – Bo nie każdy powinien mieć dostęp do twojego bloga!
- Lekcja 3: Formularze – Sztuka Grzecznego Proszenia o Dane (I Nie Wystraszenia Użytkowników)
- Django: Framework, który sprawi, że poczujesz się jak czarodziej kodu (Bez różdżki i zaklęć)