- Документация Django 1.9
- Введение¶
- Установка¶
- Шаг 5. Аутентификация пользователей в Django Step 5: Authenticate users in Django
- Шаг 5-1. Использование потока проверки подлинности Step 5-1: Use the authentication flow
- Статьи о Джанго
- Что нужно знать
- Создание вирутального окружения
- Создание базы данных MySQL
- Создание проекта Django
- Добавление django-crispy-forms
- Создание приложения accounts
- Встроенное приложение auth
- Авторизация пользователей с помощью LoginView
- Настройка URL для редиректа после авторизации
- Выход пользователя с помощью LogoutView
- Сброс пароля: PasswordResetView , PasswordResetDoneView , PasswordResetConfirmView and PasswordResetCompleteView
- Смена пароля: PasswordChangeView и PasswordChangeDoneView
- Регистрация пользователей
- Импорт URL в основой urls.py вашего проекта
- Заключение
Документация Django 1.9
Django поставляется с системой аутентификации пользователей. Она обеспечивает пользовательские аккаунты, группы, права и сессии на основе куки. Этот раздел документации объясняет как работает стандартная реализация и как можно расширить и настроить её под нужды своего проекта.
Введение¶
Система аутентификации Django отвечает за оба аспекта: аутентификацию и авторизацию. Если коротко, то аутентификация проверяет пользователя, а авторизация определяет, что аутентифицированный пользователь может делать. Далее термин “аутентификация” будет использоваться для обозначения обоих аспектов.
Система аутентификации состоит из:
Прав: Бинарные (да/нет) флаги, определяющие наличие у пользователя права выполнять определённые действия.
Групп: Общий способ назначения меток и прав на множество пользователей.
Настраиваемой системы хеширования паролей
Инструментов для форм и представлений для аутентификации пользователей или для ограничения доступа к контенту
Аутентификационная система Django старается быть очень простой и не предоставляет некоторые фичи, распространённые в других системах веб аутентификации. Такие фичи реализованы в сторонних пакетах:
Проверка сложности пароля
Ограничение попыток входа
Аутентификация через сторонние сервисы (OAuth, например)
Установка¶
Поддержка аутентификации скомпонована в виде модуля в django.contrib.auth . По умолчанию, требуемые настройки уже включены в settings.py , создаваемый с помощью команды django-admin startproject , и представляют собой две записи в параметре конфигурации INSTALLED_APPS :
‘django.contrib.auth’ содержит ядро системы аутентификации и её стандартные модели.
‘django.contrib.contenttypes’ является фреймворком типов, который позволяет правам быть назначенными на создаваемые вами модели.
и записи в параметре конфигурации MIDDLEWARE_CLASSES :
AuthenticationMiddleware ассоциирует пользователей с запросами с помощью сессий.
SessionAuthenticationMiddleware разлогинит пользователя из всех его сессий, если он поменяет пароль.
Шаг 5. Аутентификация пользователей в Django Step 5: Authenticate users in Django
Так как аутентификация является распространенным требованием для веб-приложений, в шаблоне «Веб-проект Django» предусмотрен базовый поток проверки подлинности. Because authentication is a common need for web apps, the «Django Web Project» template includes a basic authentication flow. (В шаблоне «Веб-проект опроса Django», который описан в шаге 6 этого руководства, также реализован такой поток.) При использовании любого из шаблонов проектов Django в Visual Studio в файл settings.py проекта Django включаются все модули, необходимые для проверки подлинности. (The «Polls Django Web Project» template discussed in step 6 of this tutorial also includes the same flow.) When using any of the Django project templates, Visual Studio includes all the necessary modules for authentication in the Django project’s settings.py.
Так как аутентификация является распространенным требованием для веб-приложений, в шаблоне «Веб-проект Django» предусмотрен базовый поток проверки подлинности. Because authentication is a common need for web apps, the «Django Web Project» template includes a basic authentication flow. При использовании любого из шаблонов проектов Django в Visual Studio в файл settings.py проекта Django включаются все модули, необходимые для проверки подлинности. When using any of the Django project templates, Visual Studio includes all the necessary modules for authentication in the Django project’s settings.py.
На этом шаге вы научитесь делать следующее: In this step you learn:
- Как использовать поток проверки подлинности, предоставляемый в шаблонах Visual Studio (шаг 5.1) How to use the authentication flow provided in the Visual Studio templates (step 5-1)
Шаг 5-1. Использование потока проверки подлинности Step 5-1: Use the authentication flow
Далее приведены инструкции по тестированию потока проверки подлинности и описаны связанные части проекта: The following steps exercise the authentication flow and describe the parts of the project that are involved:
Если вы еще не выполнили инструкции по созданию учетной записи суперпользователя (администратора) в файле readme.html в корневом каталоге проекта, сделайте это сейчас. If you’ve not already followed the instructions in the readme.html file in the project root to create a super user (administrator) account, do so now.
Запустите приложение из Visual Studio. Для этого последовательно выберите Отладка > Начать отладку (F5). Run the app from Visual Studio using Debug > Start Debugging (F5). Когда приложение появится в браузере, обратите внимание, что элемент управления входом отображается в правом верхнем углу панели навигации. When the app appears in the browser, observe that Log in appears on the upper right of the nav bar.
Откройте templates/app/layout.html и обратите внимание, что элемент
Откройте templates/app/loginpartial.html и посмотрите, как используется условный тег <% if user.is_authenticated %>и тег <% else %>для отображения разных элементов пользовательского интерфейса в зависимости от того, прошел ли пользователь проверку подлинности: Open templates/app/loginpartial.html and observe how it uses the conditional tag <% if user.is_authenticated %>along with an <% else %>tag to render different UI elements depending on whether the user has authenticated:
Так как при первом запуске приложения пользователи, прошедшие аутентификацию, отсутствуют, код шаблона отображает только ссылку входа по относительному пути «login». Because no user is authenticated when you first start the app, this template code renders only the «Log in» link to the relative path «login». В соответствии с заданным значением в urls.py, как показано в предыдущем разделе, этот маршрут сопоставляется с представлением django.contrib.auth.views.login . As specified in urls.py (as shown in the previous section), that route is mapped to the django.contrib.auth.views.login view. Это представление получает следующие данные: That view receives the following data:
template_name определяет шаблон для страницы входа. В нашем случае это templates/app/login.html. Here, template_name identifies the template for the login page, in this case templates/app/login.html. Свойство extra_context добавляется к данным контекста, по умолчанию переданным в шаблон. The extra_context property is added to the default context data given to the template. Наконец, authentication_form указывает класс формы для использования с именем для входа. В шаблоне это свойство отображается как объект form . Finally, authentication_form specifies a form class to use with the login; in the template it appears as the form object. Значение по умолчанию — AuthenticationForm (из django.contrib.auth.views ). В шаблоне проекта Visual Studio вместо него используется форма, определенная в файле приложения forms.py: The default value is AuthenticationForm (from django.contrib.auth.views ); the Visual Studio project template instead uses the form defined in the app’s forms.py file:
Как видим, этот класс формы является производным от AuthenticationForm . В частности он переопределяет поля имени пользователя и пароля для добавления текста заполнителя. As you can see, this form class derives from AuthenticationForm and specifically overrides the username and password fields to add placeholder text. Шаблон Visual Studio включает этот явный код, основываясь на предположении, что вам потребуется настроить форму, например добавить функцию для проверки надежности пароля. The Visual Studio template includes this explicit code on the assumption that you likely want to customize the form, such as adding password strength validation.
При переходе на страницу входа в приложении отображается шаблон login.html. When you navigate to the login page, then, the app renders the login.html template. Переменные << form.username >> и << form.password >> отвечают за отображение форм CharField из BootstrapAuthenticationForm . The variables << form.username >> and << form.password >> render the CharField forms from BootstrapAuthenticationForm . Кроме того, есть встроенный раздел для отображения сведений об ошибках проверки и готовый элемент для входа в социальные сети на тот случай, если вы решите добавить эти службы. There’s also a built-in section to show validation errors, and a ready-made element for social logins if you choose to add those services.
При отправке формы в Django выполняется аутентификация учетных данных (например, учетных данных суперпользователя). When you submit the form, Django attempts to authenticate your credentials (such as the super user’s credentials). Если аутентификация не будет пройдена, вы останетесь на текущей странице, но для form.errors будет задано значение true. If authentication fails, you remain on the current page but form.errors set to true. При успешной аутентификации Django выполняет переход по относительному URL-адресу в следующее поле, . В нашем случае это домашняя страница ( / ). If authentication is successful, Django navigates to the relative URL in the «next» field, , which in this case is the home page ( / ).
Теперь, когда снова отображается домашняя страница, при отображении шаблона loginpartial.html свойство user.is_authenticated имеет значение true. Now, when the home page is rendered again, the user.is_authenticated property is true when the loginpartial.html template is rendered. В результате отображается сообщение Hello (имя пользователя) и элемент управления выходом. As a result, you see a Hello (username) message and Log off. С помощью user.is_authenticated можно проверить аутентификацию в других частях приложения. You can use user.is_authenticated in other parts of the app to check authentication.
Чтобы проверить, авторизован ли прошедший аутентификацию пользователь для доступа к определенным ресурсам, необходимо получить от базы данных конкретные разрешения. To check whether the authenticated user is authorized to access specific resources, you need to retrieve user-specific permissions from your database. Дополнительные сведения см. в статье об использовании системы аутентификации Django (документация Django). For more information, see Using the Django authentication system (Django docs).
В частности суперпользователь или администратор авторизованы для доступа к встроенным интерфейсам администратора Django с использованием относительных URL-адресов /admin/ и /admin/doc/. The super user or administrator, in particular, is authorized to access the built-in Django administrator interfaces using the relative URLs «/admin/» and «/admin/doc/». Включить их можно так: To enable these interfaces, do the following:
Установите в своей среде пакет docutils Python. Install the docutils Python package into your environment. Для этого удобно добавить docutils в файл requirements.txt, а затем в обозревателе решений развернуть узел Среды Python, щелкнуть правой кнопкой мыши используемую среду и выбрать Установить из файла requirements.txt. A great way to do this is to add «docutils» to your requirements.txt file, then in Solution Explorer, expand the project, expand the Python Environments node, then right-click the environment you’re using an select Install from requirements.txt.
Откройте файл urls.py проекта Django и удалите комментарии по умолчанию из следующих записей: Open the Django project’s urls.py and remove the default comments from the following entries:
В файле settings.py проекта Django перейдите к коллекции INSTALLED_APPS и добавьте ‘django.contrib.admindocs’ . In the Django project’s settings.py file, navigate to the INSTALLED_APPS collection and add ‘django.contrib.admindocs’ .
Когда вы перезапускаете приложение, можно перейти по адресам /admin/ и admin/doc/, чтобы выполнять такие задачи, как создание дополнительных учетных записей пользователей. When you restart the app, you can navigate to «/admin/» and «/admin/doc/» and perform tasks like creating additional user accounts.
Последняя часть потока аутентификации — это процедура выхода. The final part to the authentication flow is logging off. Как видим в loginpartial.html, ссылка Выход просто отвечает за выполнение запроса POST по относительному URL-адресу /login. Затем запрос обрабатывается встроенным представлением django.contrib.auth.views.logout . As you can see in loginpartial.html, the Log off link simply does a POST to the relative URL «/login», which is handled by the built-in view django.contrib.auth.views.logout . В этом представлении не отображается пользовательский интерфейс. Просто выполняется переход к домашней странице (как показано в файле urls.py для шаблона ^logout$). This view doesn’t display any UI and just navigates to the home page (as shown in urls.py for the «^logout$» pattern). Если вам нужно, чтобы отображалась страница выхода из системы, сначала измените шаблон URL-адреса следующим образом, добавив свойство template_name и удалив свойство next_page: If you want to display a logoff page, first change the URL pattern as follows to add a «template_name» property and remove the «next_page» property:
Затем создайте templates/app/loggedoff.html со следующим (минимальным) содержимым: Then create templates/app/loggedoff.html with the following (minimal) contents:
Выводится следующий результат: The result appears as follows:
По завершении остановите работу сервера и снова зафиксируйте изменения в системе управления версиями. When you’re all done, stop the server and once again commit your changes to source control.
Статьи о Джанго
В этом руководстве вы узнаете, как легко добавить полноценную систему аутентификации приложение Django с функциями входа в систему, выхода из системы, смены пароля и сброса.
Мы будем использовать Django с базой данных MySQL.
Мы также будем использовать django-crispy-forms и Bootstrap 4 для стилизации пользовательского интерфейса приложения.
Что нужно знать
Давайте начнем с определением знаний для использования этого урока. Чтобы выполнить пошаговое руководство, вам необходимо выполнить несколько требований, таких как:
- базовые знания Python,
- знания Django ( django-admin.py and manage.py ),
- должна быть установлена последняя версия Python 3 (сейчас это 3.7),
- база данных MySQL установлена в вашей системе.
Мы будем использовать pip и venv , которые связаны в виде модулей в последних версиях Python, поэтому вам не нужно устанавливать их, если вы не работаете со старыми версиями.
Если вы готовы, давайте начнем!
Создание вирутального окружения
Виртуальная среда позволяет вам изолировать ваши текущие зависимости проекта от остальных пакетов, установленных глобально в вашей системе или в других виртуальных средах. Вы можете использовать virtualenv , который необходимо установить в вашей системе, или модуль venv, доступный в последних версиях Python 3.
Перейдите к своему командному терминалу и запустите:
Затем активируйте созданное окружение:
Примечание: обратите внимание, что в Windows вам нужно использовать source env/Scripts/activate для активации вашей виртуальной среды.
После активации окружения установите Django с помощью pip :
Если инфраструктура успешно установлена, то теперь вы можете использовать команды управления Django для создания и работы с вашим проектом.
Нам также необходимо установить mysql-client с помощью:
Создание базы данных MySQL
Мы будем использовать базу данных MySQL. В терминале вызовите клиент mysql, используя следующую команду:
Введите свой пароль MySQL и нажмите Enter.
Затем выполните следующую инструкцию SQL для создания базы данных:
Создание проекта Django
Давайте теперь создадим проект, используя django-admin.py . В терминале выполните следующую команду:
В Django есть средство для работы с БД — ORM , который абстрагирует операции с базой данных напрямую и поддерживает SQLite, который настроен по умолчанию в проекте.
Если вам нужно использовать в своем проекте Django PostgreSQL, MySQL или любую другую систему управления базами данных, вам нужно сначала установить ее, а затем открыть файл settings.py вашего проекта и добавить адрес базы данных и учетные данные в объект DATABASES .
Вот конфигурация для MySQL:
Обязательно замените YOUR_DB_PASSWORD своим собственным паролем MySQL.
Добавление django-crispy-forms
Мы будем использовать Bootstrap 4 для стилизации форм аутентификации, поэтому вам нужно установить его с помощью pip :
Затем откройте файл settings.py и добавьте приложение в установленные приложения:
Затем добавьте следующий параметр, который устанавливает Bootstrap 4 в качестве структуры стилей по умолчанию для django-crispy-forms :
Создание приложения accounts
Приложения — это способ организации проекта в Django. Думайте о них как о модулях.
Давайте инкапсулируем логику аутентификации, необходимую в нашем проекте, в приложение учетных записей. Выможете использовать любое имя, которое считаете подходящим.
Перейдите в свой терминал и перейдите в папку вашего проекта, если вы еще этого не сделали:
Затем создайте приложение, используя manage.py:
manage.py — еще один крипт управления для Django, который находится в корневом каталоге проекта. Он предоставляет хорошую оболочку для наиболее часто используемых команд управления проектом на Django.
Предыдущая команда создаст приложение Django с файловой структурой по умолчанию. Чтобы сделать это приложение частью вашего проекта, вам нужно открыть файл settings.py и добавить его в INSTALLED_APPS :
Теперь вы можете создать свою базу данных и запустить сервер разработки Django, используя следующие команды:
Вы можете использовать свой браузер, чтобы перейти по адресу localhost:8000 и увидеть, как работает ваше веб-приложение.
Встроенное приложение auth
Приложение auth — это встроенная система аутентификации в Django, которая позволяет разработчикам добавлять аутентификацию в свои приложения, не изобретая велосипед, пытаясь реализовать базовую функциональность с нуля.
Приложение аутентификации Django предоставляет следующие функциональные возможности из «коробки»:
Вам нужно только предоставить шаблоны для реализации этих функций в вашем приложении.
Для регистрации пользователей необходимо создать свой вид и шаблон.
Вам нужно проверить, приложение django.contrib.auth указано в INSTALLED_APPS файла settings.py , который используется по умолчанию.
Затем создайте файл urls.py в приложении учетных записей и добавьте следующий код:
Авторизация пользователей с помощью LoginView
Вы можете войти в систему в приложении Django, используя представление на основе классов LoginView . В ваш accounts/urls.py добавьте следующий путь:
Вы просто используете метод as_view() класса LoginView, чтобы вернуть объект обратного вызова, который может быть назначен в качестве функции представления функции path() .
Далее вам нужно предоставить шаблон для вашего входа в систему. Создайте папку с шаблонами в корне приложения ваших учетных записей и добавьте файл base.html со следующим кодом:
Сначала мы импортируем Bootstrap 4 в наш базовый HTML-шаблон. Затем мы создаем контейнер
Затем создайте папку templates/registration и шаблон login.html со следующим кодом:
Мы расширяем предыдущий базовый шаблон, загружаем crispy_forms_tags и затем перезаписываем основной блок main , чтобы добавить нашу форму входа.
Затем мы создаем HTML-форму с помощью метода POST и визуализируем поля формы с помощью фильтра crispy , который применяет стили Bootstrap к отдельным полям.
csrf_token добавляет поле для защиты CSRF в форму входа в систему.
Мы также добавляем скрытое поле формы, содержащее следующий URL-адрес, который будет использоваться Django для перенаправления пользователя на следующую страницу после успешного входа в систему. По умолчанию он перенаправляет на URL-адрес accounts/profile .
Настройка URL для редиректа после авторизации
Вы можете установить URL перенаправления с помощью параметра LOGIN_REDIRECT_URL . Откройте файл settings.py и добавьте:
Для проверки представления входа в систему вы можете создать пользователя с помощью команды manage.py createsuperuser из своего терминала.
Примечание. После входа в систему вы будете перенаправлены на URL-адрес /accounts/profile .
Это скриншот формы входа в систему с Bootstrap 4:
Выход пользователя с помощью LogoutView
Вы можете выйти из системы в вашем приложении, используя представление на основе классов LogoutView . В своем файле accounts.py добавьте путь logout/ и свяжите его с вызываемым представлением LogoutView :
Мы снова используем метод as_view() для возврата вызываемого объекта из класса LogoutView .
Далее вам нужно создать файл registration/logged_out.html со следующим кодом:
Это снимок экрана с завершенным выходом:
Сброс пароля: PasswordResetView , PasswordResetDoneView , PasswordResetConfirmView and PasswordResetCompleteView
Вы можете разрешить своим пользователям сбрасывать свои пароли, используя множество представлений:
В своем файле accounts/urls.py добавьте следующие пути:
Затем вам нужно добавить шаблон registration/password_reset_form.html со следующим кодом:
Таким же образом, вам нужно добавить шаблоны password_reset_confirm.html , password_reset_done.html , password_reset_email.html и password_reset_complete.html .
Это скриншот формы сброса пароля со стилями Bootstrap 4:
Смена пароля: PasswordChangeView и PasswordChangeDoneView
Вы можете разрешить своим пользователям изменять свои пароли с помощью представлений на основе классов PasswordChangeView и PasswordChangeDoneView .
В своем файле accounts/urls.py добавьте следующие пути:
Затем создайте шаблон registration/password_change_form.html и добавьте следующий код:
Вам также необходимо добавить шаблон password_change_done.html .
Это скриншот формы смены пароля:
Регистрация пользователей
Для регистрации пользователей встроенное приложение аутентификации Django не предоставляет готовую функцию или представление на основе классов, поэтому вам необходимо создать собственную реализацию регистрации.
Импорт URL в основой urls.py вашего проекта
Вы добавили различные URL-адреса для реализации аутентификации в вашем приложении учетных записей, но их нельзя использовать, пока вы не добавите их в файл уровня проекта urls.py .
Во-первых, вот полный файл accounts/urls.py :
Затем откройте файл urls.py , который находится в базовом каталоге вашего проекта, и используйте функцию include() для импорта URL-адресов учетных записей:
Теперь запустите сервер разработки. Вы можете использовать аутентификационные URL-адреса по адресу /accounts :
Заключение
В этом уроке мы увидели, как можно легко добавлять функции входа в систему, выхода из системы, сброса пароля и изменения функций в наших приложениях Django, используя приложение auth , не изобретая велосипед.
Мы также использовали Bootstrap 4 и django-crispy-forms для стилизации различных форм для входа в систему, смены пароля и сброса.