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ęć)