django.contrib.auth
В данном документе представлена справочная информация по API компонентов системы аутентификации Django. Более подробную информацию об использовании этих компонентов или о настройке аутентификации и авторизации можно найти в руководстве по теме аутентификации.
User модель
-
class models.User
Поля
-
class models.User -
Userобъекты имеют следующие поля:-
username -
Обязательное поле. Длина не более 150 символов. Имена пользователей могут содержать буквенно-цифровые символы,
_,@,+,.и-символы.Длина
max_lengthобычно достаточна для многих случаев. Если вам нужна большая длина, используйте пользовательскую модель пользователя. Если вы используете MySQL с кодировкойutf8mb4(рекомендуется для правильной поддержки Unicode), укажите не болееmax_length=191, так как MySQL по умолчанию может создавать уникальные индексы только с 191 символом в этом случае.
-
first_name -
Необязательное поле (
blank=True). Длина не более 150 символов.Изменено в Django 3.1:Длина
max_lengthувеличилась с 30 до 150 символов.
-
last_name -
Необязательное поле (
blank=True). Длина не более 150 символов.
-
email -
Необязательное поле (
blank=True). Электронный адрес.
-
password -
Обязательное поле. Хэш и метаданные пароля. (Django не хранит сам пароль.) Необработанные пароли могут быть произвольной длины и содержать любые символы. Смотрите документацию по паролям.
-
groups -
Множественное отношение к
Group
-
user_permissions -
Множественное отношение к
Permission
-
is_staff -
Булево. Определяет, может ли данный пользователь получить доступ к админской панели.
-
is_active -
Булево. Определяет, считается ли эта учетная запись активной. Рекомендуется устанавливать этот флаг в
Falseвместо удаления учетных записей, чтобы при наличии внешних ключей к пользователям внешние ключи не нарушались.Это не обязательно означает, что пользователь может войти в систему. Бэкенды аутентификации не обязаны проверять флаг
is_active, но по умолчанию бэкенд (ModelBackend) иRemoteUserBackendэто делают. Для разрешения входа неактивным пользователям можно использоватьAllowAllUsersModelBackendилиAllowAllUsersRemoteUserBackend. В этом случае необходимо также настроитьAuthenticationForm, используемыйLoginView, так как он отклоняет неактивных пользователей. Имейте в виду, что методы проверки разрешений, такие какhas_perm()и аутентификация в админской панели Django, возвращаютFalseдля неактивных пользователей.
-
is_superuser -
Булево. Означает, что у этого пользователя есть все разрешения без их явного назначения.
-
last_login -
Дата и время последнего входа пользователя.
-
date_joined -
Дата и время создания учетной записи. По умолчанию устанавливается текущей датой и временем при создании учетной записи.
-
Атрибуты
-
class models.User -
-
is_authenticated -
Только для чтения атрибут, который всегда
True(в отличие отAnonymousUser.is_authenticated, который всегдаFalse). Это способ определить, был ли пользователь аутентифицирован. Это не подразумевает каких-либо разрешений и не проверяет, активен ли пользователь или у него есть действительная сессия. Хотя обычно вы будете проверять этот атрибут наrequest.user, чтобы узнать, был ли он заполненAuthenticationMiddleware(представляющий текущего вошедшего пользователя), вы должны знать, что этот атрибутTrueдля любого объектаUser.
-
is_anonymous -
Только для чтения атрибут, который всегда
False. Это способ отличить объектыUserиAnonymousUser. Как правило, следует предпочитать использованиеis_authenticatedэтому атрибуту.
-
Методы
-
class models.User -
-
get_username() -
Возвращает имя пользователя. Поскольку модель
Userможет быть заменена, следует использовать этот метод вместо прямого обращения к атрибуту имени пользователя.
-
get_full_name() -
Возвращает
first_nameплюсlast_nameс пробелом между ними.
-
get_short_name() -
Возвращает
first_name.
-
set_password(raw_password) -
Устанавливает пароль пользователя заданной строкой, позаботившись об хэшировании пароля. Не сохраняет объект
User.Когда
raw_passwordравенNone, пароль будет установлен на недопустимый пароль, так как будто был использован методset_unusable_password().
-
check_password(raw_password) -
Возвращает
Trueесли заданная строка является правильным паролем для пользователя. (Это учитывает хэширование пароля при сравнении.)
-
set_unusable_password() -
Помечает пользователя как не имеющего установленного пароля. Это не то же самое, что иметь пустую строку для пароля.
check_password()для этого пользователя никогда не вернётTrue. Не сохраняет объектUser.Это может потребоваться, если аутентификация для вашего приложения происходит по отношению к существующему внешнему источнику, такому как каталог LDAP.
-
has_usable_password() -
Возвращает
Falseесли для этого пользователя был вызван методset_unusable_password().
-
get_user_permissions(obj=None) -
Новая функция в Django 3.0.
Возвращает набор строк разрешений, которые пользователь имеет непосредственно.
Если
objпередано, возвращает только разрешения пользователя для этого конкретного объекта.
-
get_group_permissions(obj=None) -
Возвращает набор строк разрешений, которые пользователь имеет через свои группы.
Если
objпередано, возвращает только разрешения группы для этого конкретного объекта.
-
get_all_permissions(obj=None) -
Возвращает набор строк разрешений, которые пользователь имеет как через разрешения группы, так и пользователя.
Если
objпередано, возвращает только разрешения для этого конкретного объекта.
-
has_perm(perm, obj=None) -
Возвращает
Trueесли пользователь имеет указанное разрешение, где perm в формате"<app label>.<permission codename>". (см. документацию по разрешениям). Если пользователь неактивен, этот метод всегда возвращаетFalse. Для активного суперпользователя этот метод всегда возвращаетTrue.Если
objпередано, этот метод не будет проверять разрешение для модели, а для этого конкретного объекта.
-
has_perms(perm_list, obj=None) -
Возвращает
Trueесли пользователь имеет каждое из указанных разрешений, где каждое perm в формате"<app label>.<permission codename>". Если пользователь неактивен, этот метод всегда возвращаетFalse. Для активного суперпользователя этот метод всегда возвращаетTrue.Если
objпередано, этот метод не будет проверять разрешения для модели, а для конкретного объекта.
-
has_module_perms(package_name) -
Возвращает
Trueесли пользователь имеет какие-либо разрешения в заданном пакете (метке приложения Django). Если пользователь неактивен, этот метод всегда возвращаетFalse. Для активного суперпользователя этот метод всегда возвращаетTrue.
-
email_user(subject, message, from_email=None, **kwargs) -
Отправляет электронное письмо пользователю. Если
from_emailравноNone, Django используетDEFAULT_FROM_EMAIL. Любые**kwargsпередаются в вызовsend_mail()под капотом.
-
Методы менеджера
-
class models.UserManager -
Модель
Userимеет настраиваемый менеджер, который имеет следующие вспомогательные методы (в дополнение к методам, предоставляемымBaseUserManager):-
create_user(username, email=None, password=None, **extra_fields) -
Создаёт, сохраняет и возвращает
User.Имя пользователя (
username) и пароль (password) устанавливаются как заданные. Часть домена адреса электронной почты (email) автоматически преобразуется в нижний регистр, и возвращённый объектUserбудет иметьis_active, установленным наTrue.Если пароль не предоставлен, будет вызван
set_unusable_password().Ключевые аргументы
extra_fieldsпередаются в метод__init__объектаUser, чтобы разрешить установку произвольных полей в пользовательской модели пользователя.См. создание пользователей для примера использования.
-
create_superuser(username, email=None, password=None, **extra_fields) -
Аналогично
create_user(), но устанавливаетis_staffиis_superuserнаTrue.Изменено в Django 3.0:Параметры
emailиpasswordстали необязательными.
-
with_perm(perm, is_active=True, include_superusers=True, backend=None, obj=None) -
Новая функция в Django 3.0.
Возвращает пользователей, у которых есть данное разрешение
permв формате"<app label>.<permission codename>"или как экземплярPermission. Возвращает пустой набор запросов, если не найдено пользователей с указанным разрешениемperm.Если
is_activeравноTrue(по умолчанию), возвращает только активных пользователей, илиFalse, возвращает только неактивных пользователей. ИспользуйтеNoneчтобы вернуть всех пользователей независимо от активного состояния.Если
include_superusersравноTrue(по умолчанию), результат будет включать суперпользователей.Если
backendпередано и определено вAUTHENTICATION_BACKENDS, этот метод его использует. В противном случае, он используетbackendвAUTHENTICATION_BACKENDS, если таковой имеется, иначе поднимет исключение.
-
AnonymousUser объект
-
class models.AnonymousUser -
django.contrib.auth.models.AnonymousUser— это класс, реализующий интерфейсdjango.contrib.auth.models.User, с такими отличиями:-
id всегда
None. -
usernameвсегда пустая строка. -
get_username()всегда возвращает пустую строку. -
is_anonymousимеет значениеTrueвместоFalse. -
is_authenticatedимеет значениеFalseвместоTrue. -
is_staffиis_superuserвсегдаFalse. -
is_activeвсегдаFalse. -
groupsиuser_permissionsвсегда пустые. -
set_password(),check_password(),save()иdelete()вызывают исключениеNotImplementedError.
-
id всегда
На практике, вам, вероятно, не нужно будет использовать объекты AnonymousUser самостоятельно, но они используются веб-запросами, как объяснено в следующем разделе.
Permission модель
-
class models.Permission
Поля
Permission объекты имеют следующие поля:
-
class models.Permission -
-
name -
Обязательно. Не более 255 символов. Пример:
'Can vote'.
-
content_type -
Обязательно. Ссылка на базу данных таблицу
django_content_type, которая содержит запись для каждой установленной модели.
-
codename -
Обязательно. Не более 100 символов. Пример:
'can_vote'.
-
Методы
Permission объекты имеют стандартные методы доступа к данным, как и любая другая Django модель.
Group модель
-
class models.Group
Поля
Group объекты имеют следующие поля:
-
class models.Group -
-
name -
Обязательно. Не более 150 символов. Разрешены любые символы. Пример:
'Awesome Users'.
-
permissions -
Множественное поле для
Permission:group.permissions.set([permission_list]) group.permissions.add(permission, permission, ...) group.permissions.remove(permission, permission, ...) group.permissions.clear()
-
Валидаторы
-
class validators.ASCIIUsernameValidator -
Валидатор поля, позволяющий только символы ASCII, а также
@,.,+,-, и_.
-
class validators.UnicodeUsernameValidator -
Валидатор поля, разрешающий символы Юникода, помимо
@,.,+,-, и_. По умолчанию используется дляUser.username.
Сигналы входа и выхода
Фреймворк авторизации использует следующие сигналы, которые можно использовать для уведомления о входе или выходе пользователя.
-
user_logged_in() -
Отправляется, когда пользователь успешно вошёл.
Аргументы, отправляемые с этим сигналом:
-
sender - Класс пользователя, который только что вошел.
-
request - Текущий экземпляр
HttpRequest. -
user - Экземпляр пользователя, который только что вошел.
-
-
user_logged_out() -
Отправляется, когда вызывается метод выхода.
-
sender - Как выше: класс пользователя, который только что вышел, или
Noneесли пользователь не был авторизован. -
request - Текущий экземпляр
HttpRequest. -
user - Экземпляр пользователя, который только что вышел, или
Noneесли пользователь не был авторизован.
-
-
user_login_failed() -
Отправляется, когда пользователь не смог войти.
-
sender - Имя модуля, используемого для аутентификации.
-
credentials - Словарь ключевых аргументов, содержащий данные учетных данных пользователя, которые были переданы в
authenticate()или в ваш собственный пользовательский модуль аутентификации. Данные, соответствующие набору «конфиденциальных» шаблонов (включая пароль), не будут отправляться в открытом виде в качестве части сигнала. -
request - Объект
HttpRequest, если он был предоставленauthenticate().
-
Справочник по модулям аутентификации
В этом разделе подробно описаны модули аутентификации, поставляемые с Django. Сведения о том, как их использовать и как создавать собственные модули аутентификации, см. в разделе Других источниках аутентификации руководства по аутентификации пользователя аутентификации пользователя.
Доступные модули аутентификации
В django.contrib.auth.backends доступны следующие модули:
-
class BaseBackend -
Новое в Django 3.0.
Базовый класс, предоставляющий стандартные реализации всех необходимых методов. По умолчанию он отклоняет любого пользователя и не предоставляет разрешений.
-
get_user_permissions(user_obj, obj=None) -
Возвращает пустое множество.
-
get_group_permissions(user_obj, obj=None) -
Возвращает пустое множество.
-
get_all_permissions(user_obj, obj=None) -
Использует
get_user_permissions()иget_group_permissions()для получения набора строк разрешений, которые имеетuser_obj.
-
has_perm(user_obj, perm, obj=None) -
Использует
get_all_permissions()для проверки, обладает лиuser_objстрокой разрешенияperm.
-
-
class ModelBackend -
Это по умолчанию используемый Django механизм аутентификации. Он выполняет аутентификацию с использованием учетных данных, состоящих из идентификатора пользователя и пароля. Для модели пользователя по умолчанию Django идентификатор пользователя — это имя пользователя, а для моделей пользовательских пользователей — это поле, указанное в USERNAME_FIELD (см. Настройка пользователей и аутентификации).
Он также обрабатывает модель разрешений по умолчанию, как определено для
UserиPermissionsMixin.has_perm(),get_all_permissions(),get_user_permissions()иget_group_permissions()позволяют передавать объект в качестве параметра для разрешений, специфичных для объекта, но этот механизм не реализует их, кроме как возвращения пустого набора разрешений, еслиobj is not None.with_perm()также позволяет передавать объект в качестве параметра, но в отличие от других методов, он возвращает пустой набор результатов, еслиobj is not None.-
authenticate(request, username=None, password=None, **kwargs) -
Пытается аутентифицировать
usernameсpassword, вызываяUser.check_password. Еслиusernameне предоставлен, он пытается извлечь имя пользователя изkwargsс помощью ключаCustomUser.USERNAME_FIELD. Возвращает аутентифицированного пользователя илиNone.request— этоHttpRequestи может бытьNoneв случае, если он не был передан вauthenticate()(который передает его в механизм).
-
get_user_permissions(user_obj, obj=None) -
Возвращает набор строк разрешений, которыми обладает
user_objиз собственных разрешений пользователя. Возвращает пустое множество, еслиis_anonymousилиis_activeравноFalse.
-
get_group_permissions(user_obj, obj=None) -
Возвращает набор строк разрешений, которыми обладает
user_objиз разрешений групп, к которым они принадлежат. Возвращает пустое множество, еслиis_anonymousилиis_activeравноFalse.
-
get_all_permissions(user_obj, obj=None) -
Возвращает набор строк разрешений, которыми обладает
user_obj, включая как разрешения пользователя, так и разрешения группы. Возвращает пустое множество, еслиis_anonymousилиis_activeравноFalse.
-
has_perm(user_obj, perm, obj=None) -
Использует
get_all_permissions()для проверки, обладает лиuser_objстрокой разрешенияperm. ВозвращаетFalseесли пользователь неis_active.
-
has_module_perms(user_obj, app_label) -
Возвращает, обладает ли
user_objкакими-либо разрешениями на приложениеapp_label.
-
user_can_authenticate() -
Возвращает, разрешено ли пользователю аутентифицироваться. Для соответствия поведению
AuthenticationForm, которыйprohibits inactive users from logging in, этот метод возвращаетFalseдля пользователей сis_active=False. Пользовательские модели пользователей, у которых нет поляis_active, разрешены.
-
with_perm(perm, is_active=True, include_superusers=True, obj=None) -
Новое в Django 3.0.
Возвращает всех активных пользователей, у которых есть разрешение
permв форме"<app label>.<permission codename>"или объектаPermission. Возвращает пустой набор результатов, если не найдено пользователей, у которых естьperm.Если
is_activeравноTrue(по умолчанию), возвращает только активных пользователей, а еслиFalse, возвращает только неактивных пользователей. ИспользуйтеNoneдля возвращения всех пользователей независимо от их активного состояния.Если
include_superusersравноTrue(по умолчанию), результат будет включать суперпользователей.
-
-
class AllowAllUsersModelBackend -
То же, что и
ModelBackend, за исключением того, что он не отклоняет неактивных пользователей, так какuser_can_authenticate()всегда возвращаетTrue.При использовании этого механизма аутентификации, скорее всего, вам захочется настроить
AuthenticationForm, используемыйLoginView, переопределив методconfirm_login_allowed(), так как он отклоняет неактивных пользователей.
-
class RemoteUserBackend -
Используйте этот бэкенд для использования внешней, не связанной с Django, аутентификации. Он выполняет аутентификацию, используя имена пользователей, переданные в
request.META['REMOTE_USER']. См. документацию Аутентификация по REMOTE_USER.Если вам нужен больший контроль, вы можете создать свой собственный аутентификационный бэкенд, унаследовав его от этого класса и переопределяя эти атрибуты или методы:
-
create_unknown_user -
TrueилиFalse. Определяет, будет ли создан объект пользователя, если он еще не находится в базе данных. По умолчаниюTrue.
-
authenticate(request, remote_user) -
Имя пользователя, переданное как
remote_user, считается надёжным. Этот метод возвращает объект пользователя с заданным именем пользователя, создавая новый объект пользователя, еслиcreate_unknown_userравенTrue.Возвращает
Noneеслиcreate_unknown_userравенFalseи объектUserс данным именем пользователя не найден в базе данных.request— этоHttpRequestи может бытьNoneесли он не был передан методуauthenticate()(который передает его в бэкенд).
-
clean_username(username) -
Выполняет любую очистку имени пользователя (например, удаление информации из LDAP DN) перед использованием его для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
-
configure_user(request, user) -
Настраивает вновь созданного пользователя. Этот метод вызывается сразу после создания нового пользователя и может быть использован для выполнения пользовательских действий настройки, таких как установка групп пользователя на основе атрибутов в каталоге LDAP. Возвращает объект пользователя.
request— этоHttpRequestи может бытьNoneесли он не был передан методуauthenticate()(который передает его в бэкенд).
-
user_can_authenticate() -
Возвращает, разрешено ли пользователю выполнить аутентификацию. Этот метод возвращает
Falseдля пользователей сis_active=False. Пользовательские модели пользователей, у которых нет поляis_active, разрешены.
-
-
class AllowAllUsersRemoteUserBackend -
То же, что и
RemoteUserBackend, за исключением того, что он не отклоняет неактивных пользователей, потому чтоuser_can_authenticateвсегда возвращаетTrue.
Функции-утилиты
-
get_user(request) -
Возвращает экземпляр модели пользователя, связанный с сессией данного
request.Проверяет, есть ли в сессии аутентификационный бэкенд, присутствующий в
AUTHENTICATION_BACKENDS. Если есть, использует метод бэкендаget_user()для извлечения экземпляра модели пользователя, а затем проверяет сессию, вызвав метод модели пользователяget_session_auth_hash().Возвращает экземпляр
AnonymousUser, если аутентификационный бэкенд, сохранённый в сессии, больше не находится вAUTHENTICATION_BACKENDS, если пользователь не возвращён методом бэкендаget_user()или если хеш аутентификации сессии не проходит проверку.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.1/ref/contrib/auth/