Познакомьтесь с аутентификацией Django лучше

Django поставляется с необходимыми функциями для настройки полной системы аутентификации пользователей. В этом руководстве мы рассмотрим наиболее важные компоненты системы аутентификации пользователей в Django, а именно:

  • Регистрация
  • Авторизоваться
  • Выйти

К концу этого урока вы сможете

  • Создайте проект Django, в котором пользователи могут регистрироваться, входить в систему и выходить из системы.
  • Создавайте формы в Django
  • Перенаправление пользователей после успешного входа в систему или выхода из системы

Предпосылки

В этом руководстве предполагается, что вы хорошо знакомы с Django и в вашей операционной системе установлен Python3.

Создать проект Django

Рекомендуется настроить виртуальную среду, чтобы гарантировать, что зависимости каждого проекта являются отдельными; это упрощает установку правильных версий модулей.

Начнем с создания виртуальной среды.

python3 -m venv myenv

Активируйте виртуальную среду и установите Django.

source myenv/bin/activate
python3 -m pip install django

Создайте проект Django под названием django_auth

django-admin startproject django_auth

Если вы откроете файл settings.py, вы обнаружите, что Django автоматически поставляется с приложением аутентификации под INSTALLED_APPS, как показано ниже.

Применить миграции

python3.8 manage.py migrate

Команда создаст реальные таблицы в нашей базе данных, и вы должны увидеть что-то вроде этого:

Вы также можете просмотреть таблицы и подтвердить, что они созданы:

Создать суперпользователя

Давайте создадим суперпользователя, чтобы иметь доступ к панели администратора Django:

python3.8 manage.py createsuperuser

Запускаем сервер:

python3.8 manage.py runserver

Это запустит ваше приложение по адресу http://127.0.0.1:8000/.

Приложение auth поставляется с представлениями аутентификации для обработки входа в систему, выхода из системы и управления паролями. У этих представлений нет шаблонов, поэтому нам придется создать шаблон для каждого представления.

Чтобы использовать представление, мы должны предоставить django.contrib.auth.urls в url.py файле, как показано ниже.

Приложение auth предоставляет следующие URL-адреса:

Создайте домашнюю страницу

Домашняя страница будет первой страницей, которую увидит пользователь, когда откроет наше приложение. Создайте приложение Django с именем users с помощью команды startapp:

python3.8 manage.py startapp users

Это создаст каталог с именем users со следующей структурой:

Откройте settings.py и добавьте приложение пользователей в INSTALLED_APPS.

Всякий раз, когда Django хочет отобразить страницу, он автоматически ищет ее в каталоге шаблонов приложения. Лучше всего поместить HTML-страницу в каталог с тем же именем, что и приложение.

В приложении для наших пользователей создайте home.html файл в каталоге users/templates/users . Структура вашего шаблона будет выглядеть так:

Добавьте следующий код в home.html:

Не беспокойтесь о URL-адресах, они пока не работают.

Давайте теперь визуализируем главную страницу. Django предоставляет функцию render(), которая загружает шаблон и предоставляет контексты, когда они передаются в качестве аргументов. Откройте users/views.py и напишите следующее представление, которое отображает домашнюю страницу.

Создайте файл с именем urls.py в каталоге django_auth/users и добавьте URL-адрес домашней страницы. Вверху файла urls.py импортируйте объект path из django.urls и просмотрите функции из views.py:

Не забудьте добавить URL-адреса приложений пользователя к URL-адресам проекта. Теперь файл django_auth/urls.py должен выглядеть так:

Теперь, когда вы запустите сервер и перейдете к 127.0.0.1:8000/home/, вы должны увидеть следующую страницу:

Создать страницу входа

Django будет искать шаблон входа в систему в папке регистрации в каталоге шаблонов. Давайте создадим в каталоге шаблонов папку с именем registration и добавим файл login.html:

Здесь мы добавляем csrf_token в нашу форму. Django использует токены CSRF для защиты форм от злонамеренных пользователей. Он делает это, добавляя секретный токен внутри метода POST при визуализации формы. {{ form.as_p }} отображает форму как серию <p> тегов, каждый <p> содержит одно поле.

Теперь вы можете войти в систему. Если вы перейдете к http://127.0.0.1:8000/accounts/login/, вы должны увидеть следующую страницу:

Давайте попробуем войти в систему с неправильными учетными данными, вы должны увидеть следующие ошибки:

Чтобы обеспечить беспроблемный пользовательский интерфейс, нам необходимо перенаправить пользователей на домашнюю страницу после успешного входа в систему. Для этого добавьте в settings.py следующее.

# users will be redirected to the home page after login
LOGIN_REDIRECT_URL = “home”

После успешного входа в систему вы должны увидеть следующую страницу приветствия.

Создайте страницу выхода

Для выхода пользователей из системы мы добавим ссылку, по которой пользователи будут выходить из системы, если они нажмут на нее. Мы также добавим URL-адрес перенаправления в settings.py , который будет перенаправлять пользователей обратно на домашнюю страницу после выхода из системы. Откройте файл settings.py и добавьте следующую строку кода

LOGOUT_REDIRECT_URL = "login"

Откройте home.html и обновите его, как показано ниже:

Здесь мы проверяем, аутентифицирован ли пользователь, и показываем ссылку для выхода, если True, а если False, мы показываем ссылку для входа.

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

До сих пор мы полагались на суперпользователя для выполнения функций входа и выхода. Теперь мы можем войти и выйти из системы. Давайте посмотрим, как пользователи могут зарегистрироваться самостоятельно, не прибегая к помощи администратора Django.

Самый простой способ сделать это - использовать представление на основе классов UserCreationForm и CreateView, которое предоставляет Django. UserCreationForm - это ModelForm для создания нового пользователя, и он генерирует необходимые поля, то есть username и пароль.

Откройте user/views.py и добавьте SignUp класс представления:

Затем создайте страницу templates/users/signup.html и добавьте следующее:

Наконец, добавьте представление в urls.py. Не забудьте вызвать .as_view(), поскольку это представление на основе классов.

Страница регистрации теперь выглядит так:

После успешной регистрации новый пользователь будет перенаправлен на страницу входа.

Очистить

Теперь давайте сделаем небольшую очистку, чтобы убедиться, что если пользователь вошел в систему, он увидит кнопку выхода и ссылку на главную. Откройте home.html и добавьте следующую логику:

Заключение

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