# Импортируем 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})