Урок 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
- Урок 6: Профілі Користувачів – Бо Кожен Заслуговує на Свій Зоряний Час
- Урок 4: Аутентифікація користувачів – Бо не кожен має доступ до святилища вашого блогу
- Урок 3: Форми – Як Просити Ввічливо Дані Від Користувачів (І Не Відлякати Їх)
- Lesson 2: Шаблон Model-View-Template (MVT) – Як MVC, але з магією і без головного болю
- Django: Веб-фреймворк, який перетворить тебе на кодового мага (Без жодних чаклунських книг)