Загрузка данных


# Импортируем render и redirect.
from django.shortcuts import render, redirect

# Импортируем функции аутентификации.
from django.contrib.auth import authenticate, login, logout

# Импортируем декоратор для защиты view.
from django.contrib.auth.decorators import login_required

# Импортируем messages для показа сообщений.
from django.contrib import messages

# Импортируем наши формы.
from .forms import CustomUserCreationForm, UserProfileForm


# Регистрация нового пользователя.
def register_view(request):
    # Если уже авторизован - перенаправляем в профиль.
    if request.user.is_authenticated:
        return redirect('profile')

    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            # Автоматически логиним пользователя.
            login(request, user)
            messages.success(request, f'Добро пожаловать, {user.get_full_name()}!')
            return redirect('profile')
    else:
        form = CustomUserCreationForm()

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


# Вход в систему.
def login_view(request):
    if request.user.is_authenticated:
        return redirect('profile')

    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')

        # authenticate проверяет пару email+password.
        user = authenticate(request, email=email, password=password)

        if user is not None:
            login(request, user)
            # Если в URL был ?next=..., идём туда.
            next_url = request.GET.get('next', 'profile')
            messages.success(request, f'Добро пожаловать, {user.get_full_name()}!')
            return redirect(next_url)
        else:
            messages.error(request, 'Неверный email или пароль')

    return render(request, 'accounts/login.html')


# Выход из системы. Только для авторизованных.
@login_required
def logout_view(request):
    logout(request)
    messages.info(request, 'Вы вышли из системы')
    return redirect('home')


# Профиль. Только для авторизованных.
@login_required
def profile_view(request):
    return render(request, 'accounts/profile.html', {'user': request.user})


# Редактирование профиля. Только для авторизованных.
@login_required
def edit_profile_view(request):
    if request.method == 'POST':
        # instance=request.user - обновляем текущего пользователя.
        form = UserProfileForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            messages.success(request, 'Профиль обновлён')
            return redirect('profile')
    else:
        form = UserProfileForm(instance=request.user)

    return render(request, 'accounts/edit_profile.html', {'form': form})