Представление для регистрации пользователя
Переходим к представлениям, добавим в файл views.py, нашего приложения accounts, следующий код представления регистрации пользователя:
from django.views.generic import CreateView
from django.urls import reverse_lazy
from django.contrib.messages.views import SuccessMessageMixin
from .forms import UserRegisterForm
class UserRegisterView(SuccessMessageMixin, CreateView):
"""
Представление регистрации на сайте с формой регистрации
"""
form_class = UserRegisterForm
success_url = reverse_lazy('home')
template_name = 'accounts/user_register.html'
success_message = 'Вы успешно зарегистрировались. Можете войти на сайт!'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Регистрация на сайте'
return context
В примере выше мы используем миксин (раздел 10.11 "Использование миксинов в работе с представлениями Django") и представление CreateView (раздел 10.9 "Работа с CreateView. Добавление записей пользователями"), также импортируем нашу созданную форму из файла forms.py.
Представление для авторизации пользователя
Теперь создадим представление для авторизации, также в файле views.py:
from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.auth.views import LoginView
from .forms import UserLoginForm
class UserLoginView(SuccessMessageMixin, LoginView):
"""
Авторизация на сайте
"""
form_class = UserLoginForm
template_name = 'accounts/user_login.html'
next_page = 'home'
success_message = 'Добро пожаловать на сайт!'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Авторизация на сайте'
return context
В данном примере мы также используем миксин, но наследуемся уже от готового класса представления LoginView.
Представление для выхода пользователя
Хотя это небольшая, но тоже важная часть каждого проекта с системой авторизации. Также добавим в файл views.py, после других представлений, следующий фрагмент кода:
from django.contrib.auth.views import LogoutView
class UserLogoutView(LogoutView):
"""
Выход с сайта
"""
next_page = 'home'
Настройка urls.py для представлений
Теперь нам необходимо обработать наши представления. Для этого добавим в файл urls.py, нашего приложения accounts, следующие строки кода:
from django.urls import path
from .views import ProfileUpdateView, ProfileDetailView, UserRegisterView, UserLoginView, UserLogoutView
urlpatterns = [
path('user/edit/', ProfileUpdateView.as_view(), name='profile_edit'),
path('user/<str:slug>/', ProfileDetailView.as_view(), name='profile_detail'),
path('register/', UserRegisterView.as_view(), name='register'),
path('login/', UserLoginView.as_view(), name='login'),
path('logout/', UserLogoutView.as_view(), name='logout'),
]
Осталось лишь одно, создать шаблоны и проверить в деле. В следующем шаге и займемся этим.