Lekcja 5: Rejestracja użytkowników — Bo tylko zasłużeni mogą komentować!
No proszę, dotarłeś aż tutaj! 🧙♂️ Twój blog działa, posty się pojawiają, a komentarze spływają (miejmy nadzieję, że tylko pozytywne). Ale zaraz, zaraz… Naprawdę pozwalamy każdemu komentować? Nie, nie, nie! Czas wprowadzić trochę ekskluzywności. Tylko zasłużeni, zarejestrowani użytkownicy powinni mieć prawo do wyrażania swoich opinii (lub sporu o to, czy ananas powinien znaleźć się na pizzy 🍕).
W tej lekcji dodamy rejestrację użytkowników, dzięki której goście będą mogli się rejestrować, logować i komentować. A żeby było ciekawiej, sprawimy, że komentować będą mogli tylko zalogowani użytkownicy. Gotowi? No to lecimy!
Krok 1: Aktywuj wirtualne środowisko (Magia się zaczyna!)
Najpierw upewnij się, że twoje wirtualne środowisko jest aktywne. To taka twoja magiczna bańka, gdzie wszystko działa bez zarzutu.
Jeśli jeszcze nie jesteś w środku, wpisz:
source venv/bin/activate
Gdy zobaczysz (venv)
na początku linii w terminalu, jesteś gotów na nowe, magiczne wyzwania. 🧙♂️
Krok 2: Zaktualizuj forms.py
— Usuń pole author
i dodaj CustomUserCreationForm
Teraz zaktualizujemy formularz, usuwając pole author
z CommentForm
, i dodamy nasz niestandardowy formularz rejestracji użytkowników.
Ścieżka do pliku: myblog/blog/forms.py
Tak powinien wyglądać twój forms.py
:
from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User
from .models import Comment
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['content'] # Tylko pole treści komentarza
class CustomUserCreationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
Co teraz mamy:
- Prosimy użytkownika tylko o treść komentarza, a autora komentarza przypisujemy automatycznie.
- Nasz
CustomUserCreationForm
dodaje pole email do formularza rejestracji.
Krok 3: Zaktualizuj widok blog_post_detail
, aby przypisywać autora komentarza
Skoro nie pytamy już użytkownika o autora w formularzu, przypiszemy autora automatycznie w widoku, bazując na zalogowanym użytkowniku.
Ścieżka do pliku: myblog/blog/views.py
Tak teraz wygląda zaktualizowany widok blog_post_detail
:
from django.shortcuts import render, get_object_or_404, redirect
from .models import BlogPost, Comment
from .forms import CommentForm
def blog_post_detail(request, pk):
post = get_object_or_404(BlogPost, pk=pk)
comments = post.comments.all()
if request.method == 'POST':
if request.user.is_authenticated:
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.blog_post = post
comment.author = request.user.username # Automatycznie przypisujemy zalogowanego użytkownika jako autora
comment.save()
return redirect('blog_post_detail', pk=post.pk)
else:
return redirect('login') # Przekierowanie na logowanie, jeśli użytkownik nie jest zalogowany
else:
form = CommentForm()
return render(request, 'blog_post_detail.html', {'post': post, 'comments': comments, 'form': form})
Krok 4: Stwórz widok rejestracji użytkowników
Teraz stwórzmy widok, który będzie obsługiwał rejestrację użytkowników. Jeśli formularz zostanie poprawnie wypełniony, użytkownik zostanie automatycznie zalogowany i przekierowany na stronę główną bloga.
Ścieżka do pliku: myblog/blog/views.py
Dodaj ten kod, aby stworzyć widok rejestracji:
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user) # Automatyczne logowanie po rejestracji
return redirect('blog_index')
else:
form = CustomUserCreationForm()
return render(request, 'registration/register.html', {'form': form})
Krok 5: Stwórz szablon rejestracji
Teraz potrzebujemy szablonu strony rejestracji, aby użytkownicy mogli wprowadzić swoją nazwę użytkownika, email i hasło.
Ścieżka do pliku:
myblog/
blog/
templates/
registration/
register.html
Oto kod dla register.html
:
{% extends "base.html" %}
{% block title %}Rejestracja{% endblock %}
{% block content %}
<h2>Utwórz konto</h2>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Zarejestruj się</button>
</form>
{% endblock %}
Krok 6: Dodaj trasę rejestracji w urls.py
Dodajmy trasę dla strony rejestracji w urls.py
.
Ścieżka do pliku: myblog/blog/urls.py
Dodaj ten kod do urls.py
:
from . import views
urlpatterns = [
path('', views.blog_index, name='blog_index'),
path('post/<int:pk>/', views.blog_post_detail, name='blog_post_detail'),
path('register/', views.register, name='register'), # Strona rejestracji
]
Teraz strona rejestracji jest dostępna pod adresem /register/
.
Krok 7: Zaktualizuj blog_post_detail.html
, aby blokować komentarze dla niezalogowanych użytkowników
Upewnijmy się, że tylko zalogowani użytkownicy mogą komentować, a niezalogowani zobaczą prośbę o zalogowanie się lub zarejestrowanie.
Ścieżka do pliku:
myblog/
blog/
templates/
blog_post_detail.html
Tak teraz wygląda sekcja komentarzy w blog_post_detail.html
:
<h3>Komentarze</h3>
<ul>
{% for comment in comments %}
<li><strong>{{ comment.author }}</strong>: {{ comment.content }}</li>
{% empty %}
<li>Brak komentarzy. Bądź pierwszym, który podzieli się swoją opinią!</li>
{% endfor %}
</ul>
{% if user.is_authenticated %}
<h3>Dodaj komentarz</h3>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Wyślij</button>
</form>
{% else %}
<p><a href="{% url 'login' %}">Zaloguj się</a> lub <a href="{% url 'register' %}">zarejestruj</a>, aby dodać komentarz!</p>
{% endif %}
Teraz komentarze mogą dodawać tylko zalogowani użytkownicy.
Krok 8: Przetestuj proces rejestracji i komentarzy
Gdy wszystkie zmiany zostaną wprowadzone, uruchom serwer i przetestuj rejestrację oraz komentarze, wpisując:
python3 manage.py runserver
Odwiedź http://127.0.0.1:8000/register/, aby się zarejestrować, a potem spróbuj dodać komentarz jako zalogowany użytkownik.
Krok 9: Dezaktywuj Wirtualne Środowisko (Nawet magowie muszą odpoczywać)
Kiedy skończysz, nie zapomnij dezaktywować wirtualnego środowiska:
deactivate
I oto wracasz do realnego świata (bez magii, ale z działającym kodem).
Podsumowanie Lekcji 5
Bum! 🎉 Udało Ci się dodać rejestrację użytkowników do swojego bloga i sprawić, że tylko zalogowani użytkownicy mogą komentować. Koniec z anonimowymi trollami w komentarzach! Uporządkowałeś formularz komentarzy i dodałeś płynną rejestrację, która działa jak po maśle.
W następnej lekcji zajmiemy się profilami użytkowników — bo każdy zasługuje na odrobinę osobowości na twoim blogu. A tymczasem, baw się dobrze, obserwując, jak rośnie liczba zarejestrowanych użytkowników! 🎩✨
Zobacz też
- Lekcja 6: Profile Użytkowników – Bo Każdy Zasługuje na Chwilę Sławy!
- 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)
- 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ęć)