Lekcja 3: Formularze – Sztuka Grzecznego Proszenia o Dane (I Nie Wystraszenia Użytkowników)


Lesson 3

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ż