Управление пользователями

Нашему сайту необходима система для регистрации и авторизации пользователей. В Django есть встроенные инструменты для работы с пользователями, и мы задействуем эту часть фреймворка в нашем проекте.
В интерфейсе администратора уже есть подраздел управления пользователями. Через командную строку вы создали суперпользователя, а при обновлении БД в системе появился пользователь leo. Но было бы странно добавлять остальных пользователей вручную. Дадим им возможность регистрироваться самостоятельно.

Модуль django.contib.auth

Исходный код модулей, пакетов и библиотек вашего проекта сохранён в папке /venv. В ней находится виртуальное окружение проекта. Если вы хотите узнать, как работает проект — почитайте исходный код и документацию.
В состав исходного кода фреймворка Django входит директория /contrib — «склад полезных вещей», набор готовых приложений для решения стандартных задач: поддержки мультисайтовости, страниц flatpages, работы с ГИС, системы site map, публикации RSS-лент etc. Любое из этих приложений можно подключить по определённым правилам к проекту — и оно заработает «из коробки».
Приложение django.contib.auth было установлено автоматически вместе с Django при подготовке окружения. Именно оно отвечает за работу с пользователями. Посмотрим, как оно устроено и как с ним работать.
Для начала найдём основные элементы этого приложения.

Поиск URL-шаблонов

В модуле django.contib.auth есть файл urls.py. Посмотрите, какие адреса станут доступны на нашем сайте после подключения этого модуля:
Скопировать кодPYTHON
from django.contrib.auth import views from django.urls import path urlpatterns = [ path('login/', views.LoginView.as_view(), name='login'), path('logout/', views.LogoutView.as_view(), name='logout'), path('password_change/', views.PasswordChangeView.as_view(), name='password_change'), path('password_change/done/', views.PasswordChangeDoneView.as_view(), name='password_change_done'), path('password_reset/', views.PasswordResetView.as_view(), name='password_reset'), path('password_reset/done/', views.PasswordResetDoneView.as_view(), name='password_reset_done'), path('reset/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'), path('reset/done/', views.PasswordResetCompleteView.as_view(), name='password_reset_complete'), ]
Обратите внимание на имена (параметр name) для URL-шаблонов списка urlpatterns. По этим именам можно будет обращаться к страницам, в дальнейшем нам это пригодится.

View-классы приложения Auth

Если посмотреть исходный код модуля django/contrib/auth/views.py (локально этот файл доступен в директории виртуального окружения проекта venv/lib/python3.8/site-packages/django/contrib/auth/views.py), то мы найдём множество Class Based View.
Class Based View — это классы, по своему назначению аналогичные view-функциям, они так же обрабатывают запросы и возвращают ответ.
Поищите в файле названия классов, в имени которых есть слово "View", и найдите в них свойство template_name: это предустановленные названия шаблонов, необходимых для работы с пользователями
Скопировать кодPYTHON
class LoginView(SuccessURLAllowedHostsMixin, FormView): template_name = 'registration/login.html' class LogoutView(SuccessURLAllowedHostsMixin, TemplateView): template_name = 'registration/logged_out.html' class PasswordResetView(PasswordContextMixin, FormView): template_name = 'registration/password_reset_form.html' class PasswordResetDoneView(PasswordContextMixin, TemplateView): template_name = 'registration/password_reset_done.html' class PasswordResetConfirmView(PasswordContextMixin, FormView): template_name = 'registration/password_reset_confirm.html' class PasswordResetCompleteView(PasswordContextMixin, TemplateView): template_name = 'registration/password_reset_complete.html' class PasswordChangeView(PasswordContextMixin, FormView): template_name = 'registration/password_change_form.html' class PasswordChangeDoneView(PasswordContextMixin, TemplateView): template_name = 'registration/password_change_done.html'
Давайте разберёмся, какими страницами управляют эти view-классы:
В этом списке не хватает страницы регистрации, её мы создадим отдельно.
В директории для шаблонов модуля Auth, venv/lib/python3.8/site-packages/django/contrib/auth/templates/ этих файлов нет, их нужно создать самостоятельно.
Надо будет создать такие шаблоны для нашего проекта Yatube:

Создание отдельного приложения Users

Для того чтобы собрать весь код для управления регистрацией пользователей в одном месте, самостоятельно создайте новое приложение Users и добавьте его в начало списка INSTALLED_APPS в конфиге сайта.
Скорее всего, вам пригодится консольная команда
Скопировать кодBASH
$ python manage.py startapp
Разберитесь, какие Class Based View потребуются в работе классов для регистрации и авторизации пользователей.