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.

Теперь у нас есть рабочая страница регистрации, которая будет основой для последующей аутентификационной системы. Пользователи смогут создавать аккаунты и сразу начинать работать с вашим приложением.

1
Задача
Модуль 3: Django, 15 уровень, 4 лекция
Недоступна
Создание формы регистрации
Создание формы регистрации
1
Задача
Модуль 3: Django, 15 уровень, 4 лекция
Недоступна
Представление для регистрации пользователя
Представление для регистрации пользователя
3
Опрос
Введение в систему аутентификации Django, 15 уровень, 4 лекция
Недоступен
Введение в систему аутентификации Django
Введение в систему аутентификации Django
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ