JavaRush /Курси /Модуль 3: Django /Створення сторінки реєстрації користувача

Створення сторінки реєстрації користувача

Модуль 3: Django
Рівень 15 , Лекція 4
Відкрита

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

Крок 1: Створення форми реєстрації

Для початку створимо форму, яка збере дані від користувача. Ми можемо створити форму з нуля (використовуючи клас forms.Form) або на основі моделі User (за допомогою ModelForm). Для спрощення почнемо з базового підходу.

Форма на основі forms.Form. Створюємо нову форму RegistrationForm, додаючи необхідні поля.

# myapp/forms.py
from django import forms
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError

class RegistrationForm(forms.Form):
    username = forms.CharField(max_length=150, required=True, label="Ім'я користувача")
    email = forms.EmailField(required=True, label="Електронна пошта")
    password1 = forms.CharField(
        label="Пароль",
        widget=forms.PasswordInput,
        required=True
    )
    password2 = forms.CharField(
        label="Повторіть пароль",
        widget=forms.PasswordInput,
        required=True
    )

    def clean_username(self):
        """Перевіряємо, що ім'я користувача унікальне."""
        username = self.cleaned_data['username']
        if User.objects.filter(username=username).exists():
            raise ValidationError("Користувач із таким ім'ям вже існує.")
        return username

    def clean(self):
        """Перевіряємо, що обидва паролі співпадають."""
        cleaned_data = super().clean()
        password1 = cleaned_data.get("password1")
        password2 = cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise ValidationError("Паролі не співпадають.")
        return cleaned_data

Тут ми додали перевірку на унікальність імені користувача та співпадіння паролів. Це базовий рівень валідації.

Крок 2: створення представлення для реєстрації

Тепер займемося представленням, яке відповідатиме за реєстрацію. Це буде функція-представлення (FBV), щоб на перших етапах коду було легше працювати.

# myapp/views.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import login
from .forms import RegistrationForm

def register(request):
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            # Створюємо нового користувача
            user = User.objects.create_user(
                username=form.cleaned_data['username'],
                email=form.cleaned_data['email'],
                password=form.cleaned_data['password1']
            )
            # Автоматично логінимо нового користувача
            login(request, user)
            # Редирект на головну сторінку
            return redirect('home')  # Переконайтеся, що у вас є URL з ім'ям 'home'
    else:
        form = RegistrationForm()

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

Тут ми виконуємо наступні дії:

  1. Перевіряємо, чи є запит POST.
  2. Валідуємо форму.
  3. Якщо все добре, створюємо користувача через метод create_user.
  4. Логінимо користувача після реєстрації.
  5. Перенаправляємо його на головну сторінку.

Крок 3: розробка шаблона сторінки реєстрації

Шаблон — це те, як сторінка виглядатиме для користувача. Створимо файл register.html у папці templates/registration/.

<!-- templates/registration/register.html -->
{% extends 'base.html' %}

{% block content %}
<h2>Реєстрація</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Зареєструватися</button>
</form>
{% endblock %}

Ми створюємо простий HTML-шаблон, який включає форму та кнопку відправки.

Крок 4: налаштування і підключення маршруту

Додамо URL для нашого представлення у urls.py.

# myapp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register, name='register'),
    # інші маршрути
]

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

Крок 5: покращення користувацького досвіду (UX)

Коли розробка базової функціональності завершена, важливо подумати про користувацький досвід:

  1. Обробка повідомлень про успіх та помилки. Додамо повідомлення, щоб повідомити користувача,
  2. що реєстрація пройшла успішно. Ми будемо використовувати Django Message Framework.

Оновимо наше представлення наступним чином:

from django.contrib import messages

def register(request):
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(
                username=form.cleaned_data['username'],
                email=form.cleaned_data['email'],
                password=form.cleaned_data['password1']
            )
            login(request, user)
            messages.success(request, "Ви успішно зареєструвалися!")
            return redirect('home')
    else:
        form = RegistrationForm()

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

А в шаблон додамо обробку повідомлень:

{% if messages %}
    <ul>
    {% for message in messages %}
        <li>{{ message }}</li>
    {% endfor %}
    </ul>
{% endif %}

Стайлінг форми. Підключіть CSS-бібліотеку, наприклад, Bootstrap, щоб зробити форму більш привабливою:

<form method="post" class="form-group">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="btn btn-primary">Зареєструватися</button>
</form>

Крок 6: додавання e-mail підтвердження

Припустимо, що ми хочемо, щоб користувач підтверджував свою реєстрацію через e-mail. Для цього:

  1. Генеруємо токен для користувача.
  2. Відправляємо e-mail з посиланням на активацію.
  3. Після переходу за посиланням активуємо обліковий запис.

Цей процес вимагає налаштування відправки листів у Django. На цьому етапі курсу ми залишимо це завдання як опціональне, але попереду ми ще детально розбиратимемо роботу з e-mail.

Практичне завдання

  1. Реалізуйте базову функціональність реєстрації у вашому проєкті.
  2. Додайте повідомлення про успішну реєстрацію.
  3. Спробуйте налаштувати кастомну валідацію для e-mail (наприклад, заборонити реєстрацію з поштовими адресами від певного домену).
  4. Стилизуйте форму реєстрації з використанням Bootstrap.

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

3
Опитування
Вступ до системи автентифікації Django, рівень 15, лекція 4
Недоступний
Вступ до системи автентифікації Django
Вступ до системи автентифікації Django
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ