Lekcja 5: Rejestracja użytkowników — Bo tylko zasłużeni mogą komentować!


Lekcja 5

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ż