Урок 5: Реєстрація користувачів – Тільки обрані можуть залишати коментарі!


Урок 5

Урок 5: Реєстрація користувачів – Тільки обрані можуть залишати коментарі!

Ну що, дійшли до цього моменту? 🧙‍♂️ Твій блог уже працює, пости публікуються, коментарі з’являються (сподіваємося). Але почекай… ми справді дозволяємо коментувати всім підряд? Ні, ні, ні! Потрібна ексклюзивність. Тільки обрані, зареєстровані користувачі повинні мати можливість залишати свої мудрі (або абсурдні) думки про піцу з ананасами 🍕.

На цьому уроці ми додамо реєстрацію користувачів, щоб відвідувачі могли реєструватися, входити в систему й коментувати. А поки що, переконаємося, що коментувати можуть лише зареєстровані користувачі. Готові? Поїхали!


Крок 1: Активуй Віртуальне Середовище (Запускаємо Магію)

Спочатку переконайся, що твоє віртуальне середовище активовано. Це твоя чарівна бульбашка, де все працює без зайвих проблем.

Якщо ти ще не всередині, запусти:

source venv/bin/activate

Як тільки побачиш (venv) на початку терміналу, ти готовий до нових магічних звершень. 🧙‍♂️


Крок 2: Оновлюємо forms.py – Забираємо поле author і додаємо CustomUserCreationForm

Тепер ми оновимо форму, видаливши поле author з CommentForm, і визначимо нашу кастомну форму для реєстрації користувачів.

Шлях до файлу: myblog/blog/forms.py

Ось як має виглядати твій 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']  # Залишаємо лише поле для контенту коментаря

class CustomUserCreationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

Тепер:

  • Ми запитуємо тільки контент коментаря, а автора коментаря система автоматично запише сама.
  • Маємо форму CustomUserCreationForm, яка додає поле для електронної пошти в процес реєстрації.

Крок 3: Модифікуємо View blog_post_detail, Щоб Призначати Автора

Оскільки ми більше не запитуємо автора у формі, ми призначимо автора як залогіненого користувача безпосередньо у view.

Шлях до файлу: myblog/blog/views.py

Ось як має виглядати оновлена view 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  # Автоматично призначаємо автором залогіненого користувача
                comment.save()
                return redirect('blog_post_detail', pk=post.pk)
        else:
            return redirect('login')  # Перенаправляємо на сторінку логіну, якщо користувач не залогінений
    else:
        form = CommentForm()

    return render(request, 'blog_post_detail.html', {'post': post, 'comments': comments, 'form': form})

Крок 4: Створюємо View для Реєстрації Користувачів

Тепер ми створимо view для реєстрації користувачів. Якщо форма пройшла перевірку, користувач автоматично залогіниться та буде перенаправлений на головну сторінку блогу.

Шлях до файлу: myblog/blog/views.py

Додай цей код для створення view реєстрації:

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)  # Автоматичний вхід після реєстрації
            return redirect('blog_index')
    else:
        form = CustomUserCreationForm()

    return render(request, 'registration/register.html', {'form': form})

Крок 5: Створюємо Шаблон для Реєстрації

Тепер потрібно створити шаблон для сторінки реєстрації, щоб користувачі могли ввести свій логін, електронну пошту та пароль.

Шлях до файлу:

myblog/
  blog/
    templates/
      registration/
        register.html

Ось код для register.html:

{% extends "base.html" %}

{% block title %}Реєстрація{% endblock %}

{% block content %}
<h2>Створити обліковий запис</h2>
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Реєстрація</button>
</form>
{% endblock %}

Крок 6: Додаємо Маршрут для Реєстрації в urls.py

Давай зробимо сторінку реєстрації доступною, додавши маршрут в urls.py.

Шлях до файлу: myblog/blog/urls.py

Додай цей маршрут у 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'),  # Сторінка реєстрації
]

Тепер сторінка реєстрації доступна на /register/.


Крок 7: Оновлюємо blog_post_detail.html, Щоб Обмежити Можливість Коментувати

Переконаймося, що тільки залогінені користувачі можуть залишати коментарі, а незалогінені бачать прохання увійти або зареєструватися.

Шлях до файлу:

myblog/
  blog/
    templates/
      blog_post_detail.html

Ось як має виглядати секція коментарів у blog_post_detail.html:

<h3>Коментарі</h3>
<ul>
    {% for comment in comments %}
        <li><strong>{{ comment.author }}</strong>: {{ comment.content }}</li>
    {% empty %}
        <li>Немає коментарів. Будь першим, хто поділиться думкою!</li>
    {% endfor %}
</ul>

{% if user.is_authenticated %}
    <h3>Залишити коментар</h3>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Надіслати</button>
    </form>
{% else %}
    <p><a href="{% url 'login' %}">Увійдіть</a> або <a href="{% url 'register' %}">зареєструйтесь</a>, щоб залишити коментар!</p>
{% endif %}

Тепер лише залогінені користувачі можуть залишати коментарі.


Крок 8: Перевіряємо Процес Реєстрації та Коментування

Як тільки все готово, запускаємо сервер і тестуємо функції реєстрації та коментування:

python3 manage.py runserver

Відвідай http://127.0.0.1:8000/register/, щоб зареєструватися, і спробуй залишити коментар як залогінений користувач.


Крок 9: Деактивуй Віртуальне Середовище (Магії Теж Потрібен Відпочинок)

Коли закінчиш, не забудь деактивувати віртуальне середовище:

deactivate

І ось ти повертаєшся до реального світу (без магії, але з працездатним кодом).


Висновок Уроку 5

Бум! 🎉 Ти успішно додав реєстрацію користувачів на свій блог і зробив так, що коментувати можуть тільки зареєстровані користувачі. Більше жодних анонімних тролів у коментарях! Ти також очистив форму коментарів і налаштував реєстрацію, яка працює як годинник.

На наступному уроці ми розглянемо профілі користувачів – бо кожен користувач заслуговує трохи особистості на твоєму блозі. До того часу, насолоджуйся спостереженням за зростанням твоєї бази зареєстрованих користувачів! 🎩✨


See also