
Lekcja 3: Formularze – Sztuka Grzecznego Proszenia o Dane (I Nie Wystraszenia Użytkowników)
Witaj ponownie, dzielny programisto! 🧙♂️ Do tej pory stworzyłeś modele, ustawiłeś adresy URL i wyświetliłeś swoje posty w blogu jak prawdziwy profesjonalista. Ale co z tego, jeśli Twoi czytelnicy nie mogą zostawić komentarza, narzekając na dobór czcionki? Dlatego dziś nauczymy się magii formularzy!
Formularze to Twoje drzwi do interakcji z użytkownikami. To jak polska gościnność – otwierasz drzwi, prosisz o dane, a użytkownicy zostawiają swoje opinie, (nie licząc spamu – tym się zajmiemy!). Dziś stworzymy formularz komentarzy do Twojego bloga. Przygotuj się, będzie ciekawie!
Krok 1: Aktywacja Wirtualnego Środowiska (Twój Ochronny Bąbel)
Zanim zaczniesz cokolwiek robić, upewnij się, że jesteś w wirtualnym środowisku. To taki techniczny schron, gdzie wszystkie zależności są odizolowane, jak ogórki kiszone na półce w piwnicy.
Jeśli wirtualne środowisko nie jest jeszcze aktywne, wpisz następujące polecenie:
source venv/bin/activate
Jeśli korzystasz z Arch Linux, upewnij się, że masz zainstalowane wirtualne środowisko:
sudo pacman -S python-virtualenv
Kiedy zobaczysz (venv) na początku linii w terminalu, wiedz, że jesteś w swojej technicznej oazie. To jak zamknięcie się w pokoju podczas imprezy rodzinnej – jesteś sam, ale wszyscy wiedzą, że pracujesz.
Krok 2: Tworzenie Modelu BlogPost (Nasza Magiczna Receptura)
Zanim przejdziemy do komentarzy, pamiętaj, że dodajemy je do postów na blogu. Dlatego potrzebujemy modelu BlogPost, na którym opiera się cały blog. Upewnij się, że masz taki kod w models.py:
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
Krok 3: Tworzenie Modelu Comment (Bo Dane Też Potrzebują Domu)
Teraz, gdy mamy model BlogPost, czas stworzyć model do przechowywania komentarzy. Każdy post potrzebuje trochę feedbacku, choćby to było „pierwszy!”. Dodaj model Comment poniżej modelu BlogPost w models.py:
class Comment(models.Model):
blog_post = models.ForeignKey(BlogPost, on_delete=models.CASCADE, related_name='comments')
author = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'Comment by {self.author} on {self.blog_post}'
Krok 4: Tworzenie i Zastosowanie Migracji (Bo Bazy Danych Też Trzeba Kochać)
Podobnie jak z postami na blogu, musimy poinformować bazę danych o naszej nowej strukturze – modelu Comment. Wykonaj następujące polecenia:
python3 manage.py makemigrations
python3 manage.py migrate
Gotowe! Tabela Comment istnieje i jest gotowa do przyjęcia wszelkich opinii i recenzji od Twoich odwiedzających.
Krok 5: Tworzenie CommentForm (Grzecznie Proszenie o Dane)
Teraz musimy stworzyć formularz, aby użytkownicy mogli zostawiać swoje komentarze. Formularze w Django są proste, jak zamówienie zapiekanek na rynku.
Stwórz nowy plik w katalogu blog o nazwie forms.py i dodaj tam taki kod:
from django import forms
from .models import Comment
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['author', 'content']
Formularz ModelForm to taki jakby gotowy przepis na pierogi – wrzucasz składniki, a Django robi resztę za Ciebie.
Krok 6: Dodanie Formularza do Widoku (Tu Dzieje Się Magia)
Teraz, gdy mamy formularz, musimy go wyświetlić i obsłużyć dane, które wprowadzą użytkownicy. Zmodyfikujmy nasz widok blog_index w pliku views.py, aby dodać formularz.
Upewnij się, że zaimportowałeś funkcję get_object_or_404 z modułu shortcuts, aby nie było błędów przy pobieraniu postów.
Oto poprawiony kod views.py:
from django.shortcuts import render, get_object_or_404, redirect # Upewnij się, że dodałeś get_object_or_404
from .models import BlogPost, Comment
from .forms import CommentForm
def blog_index(request):
posts = BlogPost.objects.all().order_by('-created_at')
return render(request, 'blog_index.html', {'posts': posts})
def blog_post_detail(request, pk):
post = get_object_or_404(BlogPost, pk=pk) # Tu używamy get_object_or_404
comments = post.comments.all()
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.blog_post = post
comment.save()
return redirect('blog_post_detail', pk=post.pk)
else:
form = CommentForm()
return render(request, 'blog_post_detail.html', {'post': post, 'comments': comments, 'form': form})
Krok 7: Tworzenie Szablonu do Wyświetlania Formularza (Dajmy Użytkownikom Głos)
Teraz dodajmy szablon, aby użytkownicy mogli zostawiać komentarze do Twoich postów. Otwórz lub stwórz plik blog_post_detail.html w katalogu templates i dodaj:
<!DOCTYPE html>
<html>
<head>
<title>{{ post.title }}</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<h2>Komentarze</h2>
<ul>
{% for comment in comments %}
<li><strong>{{ comment.author }}</strong>: {{ comment.content }}</li>
{% endfor %}
</ul>
<h3>Zostaw komentarz</h3>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Wyślij</button>
</form>
</body>
</html>
Krok 8: Dodanie URL-a do Widoku Szczegółów Postu
Na koniec ustawmy URL, aby użytkownicy mogli zobaczyć szczegóły każdego postu. Otwórz urls.py w katalogu blog i dodaj:
from . import views
urlpatterns = [
path('', views.blog_index, name='blog_index'),
path('post/<int:pk>/', views.blog_post_detail, name='blog_post_detail'),
]
Teraz możesz przetestować to pod adresem http://127.0.0.1:8000/blog/post/1/ po utworzeniu pierwszego posta na blogu.
Krok 9: Deaktywacja Wirtualnego Środowiska
Kiedy skończysz na dziś (albo po prostu chcesz chwilę odpocząć), nie zapomnij dezaktywować swojego wirtualnego środowiska, aby wrócić do codziennej rzeczywistości.
Wpisz:
deactivate
Teraz (venv) zniknie z początku linii terminala, a Ty wrócisz do zwykłego świata – jak po obudzeniu się z drzemki na kanapie.
Podsumowanie Lekcji 3
Gratulacje, wielki czarodzieju! 🎉 Udało Ci się dodać formularze do swojego bloga w Django. Teraz Twoi użytkownicy mogą zostawiać komentarze pod postami – czy to będą przydatne porady, czy może “fajne!”, a może ktoś poprawi Twoje błędy (bo przecież każdemu się zdarza).
Na następnej lekcji zagłębimy się w uwierzytelnianie użytkowników – bo nie wszyscy powinni mieć dostęp do komentarzy bez kontroli, prawda? A póki co, ciesz się nowym interaktywnym blogiem i bądź czujny, zanim przyjdą trolle.
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 2: Model-View-Template (MVT) – Jak MVC, tylko z magią i mniej bólu głowy
- Django: Framework, który sprawi, że poczujesz się jak czarodziej kodu (Bez różdżki i zaklęć)