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

Практичне заняття зі створення аутентифікації

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

На цій лекції у нас не буде довгих теоретичних вступів — тільки код, практика і невелика творча агонія (без неї програмування неможливе!). Ми будемо будувати систему аутентифікації для нашого Django-додатка. Ви вже знаєте, що це таке, як це працює і які "цеглинки" є в Django для її реалізації. Сьогодні все зберемо докупи.

Структура завдання

Сьогодні ми зробимо:

  1. Створення форми реєстрації користувача.
  2. Створення системи входу і виходу з акаунта.
  3. Додамо обмеження доступу до деяких сторінок.
  4. Налаштуємо редиректи для більшої логіки роботи.
  5. Створимо шаблони для всіх етапів аутентифікації.

Давайте почнемо!

Крок 1: створюємо форму реєстрації

Для управління користувачами спочатку використовуємо стандартну модель User. Створимо форму реєстрації, яка буде збирати ім'я користувача, email і пароль.

Почнемо зі створення форми у файлі forms.py у нашому додатку:

from django import forms
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(
        label='Пароль',
        widget=forms.PasswordInput,
        min_length=8
    )
    password_confirm = forms.CharField(
        label='Підтвердження пароля',
        widget=forms.PasswordInput
    )

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

    # Перевіряємо збіг паролів
    def clean_password_confirm(self):
        password = self.cleaned_data['password']
        password_confirm = self.cleaned_data['password_confirm']
        if password != password_confirm:
            raise ValidationError('Паролі не збігаються.')
        return password_confirm
  • Ми використали Meta для прив’язки форми до моделі User.
  • Додали поле для підтвердження пароля.
  • Реалізували валідацію паролів через метод clean_password_confirm.

Крок 2: Реєстрація користувача

Тепер створимо представлення для реєстрації та відповідний URL.

У файлі views.py:

from django.shortcuts import render, redirect
from .forms import UserRegistrationForm
from django.contrib.auth import login

def register(request):
    if request.method == 'POST':
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.set_password(form.cleaned_data['password'])  # Встановлюємо пароль
            user.save()
            login(request, user)  # Автоматично логінимо після реєстрації
            return redirect('home')  # Редирект на головну сторінку
    else:
        form = UserRegistrationForm()
    return render(request, 'register.html', {'form': form})

URL для реєстрації (файл urls.py):

from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register, name='register'),
]

Створіть новий шаблон register.html:

<!DOCTYPE html>
<html>
<head>
    <title>Реєстрація</title>
</head>
<body>
    <h1>Реєстрація</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Зареєструватися</button>
    </form>
</body>
</html>

Чудово! Тепер користувачі можуть реєструватися.

Крок 3: Вхід і вихід

Використовуємо вбудовані представлення Django для входу і виходу.

У файлі views.py все просто:

from django.contrib.auth.views import LoginView, LogoutView

class UserLoginView(LoginView):
    template_name = 'login.html'

class UserLogoutView(LogoutView):
    next_page = 'home'  # Редирект після виходу

Для входу і виходу у файлі urls.py:

urlpatterns += [
    path('login/', UserLoginView.as_view(), name='login'),
    path('logout/', UserLogoutView.as_view(), name='logout'),
]

Створіть новий шаблон login.html:

<!DOCTYPE html>
<html>
<head>
    <title>Вхід</title>
</head>
<body>
    <h1>Вхід</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Увійти</button>
    </form>
</body>
</html>

Тепер користувачі можуть входити і виходити із системи.

Крок 4: Обмеження доступу

Давай зробимо сторінку, доступну тільки для авторизованих користувачів.

Представлення для захищеної сторінки, додаємо:

from django.contrib.auth.decorators import login_required

@login_required
def restricted_page(request):
    return render(request, 'restricted_page.html')

У файлі urls.py:

urlpatterns += [
    path('restricted/', views.restricted_page, name='restricted'),
]

Створимо шаблон restricted_page.html

<!DOCTYPE html>
<html>
<head>
    <title>Доступна тільки для авторизованих</title>
</head>
<body>
    <h1>Привіт, авторизований користувач!</h1>
    <p>Ця сторінка доступна тільки після авторизації.</p>
</body>
</html>

Тепер, якщо користувач спробує зайти на сторінку /restricted/ без входу в систему, його перекине на сторінку входу.

Крок 5: Персоналізація редиректів

У файлі settings.py додайте:

LOGIN_REDIRECT_URL = 'home'  # Куди редиректити після успішного входу
LOGOUT_REDIRECT_URL = 'login'  # Куди редиректити після виходу

Ці параметри допоможуть зробити переходи між сторінками більш логічними.

Крок 6: Тестуємо все!

  1. Переходьте на /register/ і створюйте нового користувача.
  2. Після реєстрації вас автоматично перенаправить на головну сторінку (або куди ви вказали в LOGIN_REDIRECT_URL).
  3. Перейдіть на /login/ і увійдіть в систему.
  4. Перейдіть на /restricted/ і переконайтеся, що вона доступна тільки для авторизованих користувачів.
  5. Вийдіть із системи через /logout/ і перевірте, що сторінка /restricted/ більше вам недоступна.

Ось і все, у нас тепер є базова, але функціональна система аутентифікації! Ви щойно створили основу, яку можна буде розширювати, додаючи, наприклад, двофакторну аутентифікацію чи соціальні логіни через Google або Facebook.

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

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