Django 5 для начинающих

Прогресс по курсу:  9/1004

10.12 Доработки системы авторизации и регистрации
3 из 3 шагов пройдено

Представление для регистрации пользователя

Переходим к представлениям, добавим в файл 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'),

]

 

Осталось лишь одно, создать шаблоны и проверить в деле. В следующем шаге и займемся этим.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Речевая ошибка в предложении "Это самая мелочь, но необходимая часть каждого проекта с системой авторизации." из раздела "Представление для выхода пользователя". Простите, но очень уж бросается в глаза)

@Кирилл_Семенихин, спасибо, исправил.

Я не понял, а как должен лог аут произойти? меня просто перекидывает на урл .../logout и все, из аккаунта выхода не происходит

@Ilia_Boiarintsev, Увы, но на версии Django 5.0 и выше  удалили выход из системы по запросу GET. Перейдите на 4 версию:

pip uninstall Django
pip install Django==4.2.8

В ближайшее время мы постараемся перевести курс на 5 версию.

@Илья_Перминов,  понял! спасибо за прояснение.