1) Убеждаемся, что настройки проекта по-умолчанию содержат необходимые модули для авторизации и они подключены
файл settings.py: как в коде ниже auth и contenttypes в INSTALLED_APPS, SessionMiddleware и AuthenticationMiddleware в MIDDLEWARE
INSTALLED_APPS = [ ... "django.contrib.auth", "django.contrib.contenttypes", ... ] MIDDLEWARE = [ ... "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", ... ]
2) В вашей базе данных присутствуют таблицы
auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
Они появляются при первоначальной миграции, при создании проекта
Если их нету, то после первого пункта, запустите первоначальную миграцию в консоли:
> manage.py migrate
3) Нам понадобится форма авторизации (с регистрацией, если она нужна, можно проделать аналогичным образом)
У меня пока нету времени на написание своей полноценной, поэтому возьму готовую форму из стандартных модулей админки django
Можно найти ее через поиск файлов по имени «login.html» в вашем проекте в папке дистрибутива django
У меня, примерный путь был
…/django/contrib/admin/templates/admin/login.html
Копируем файл полностью и вставляем уже в структуру ваших файлов проекта по пути:
/templates/registration/login.html
Это стандартный путь к такой форме. Если же вы решите разместить форму авторизации в другом месте, нужно указать путь к ней в конфигурацию
settings.LOGIN_URL
4) Добавляем в основной файл роутинга urls.py информацию по форме авторизации
from django.contrib.auth import views as auth_views ... urlpatterns = [ ... path('accounts/login/', auth_views.LoginView.as_view()), ]
5) В файле views.py для любого метода обработки запроса теперь может поставить декоратор, который будет требовать авторизацию
Если пользователь уже авторизован — пускать запрос на дальнейшую обработку, если не был — показывать форму авторизации и после авторизации, возвращаться в целевой метод обработки запроса
from django.contrib.auth.decorators import login_required ... @login_required def my_view(request): ...
Неавторизован:
Авторизован — ваша страница: