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 символов.
-
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может быть заменена, следует использовать этот метод вместо прямого обращения к атрибуту username.
-
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)
-
acheck_password(raw_password) -
Асинхронная версия:
acheck_password()Возвращает
Trueесли заданная строка — правильный пароль для пользователя. (При сравнении учитывается хэширование пароля.)Изменено в Django 5.0:acheck_password()метод был добавлен.
-
set_unusable_password() -
Помечает пользователя как не имеющего установленного пароля. Это не то же самое, что имеющий пустую строку в качестве пароля.
check_password()для этого пользователя никогда не вернётTrue. Не сохраняет объектUser.Возможно, это потребуется, если аутентификация для вашего приложения происходит через существующий внешний источник, такой как каталог LDAP.
Ограничение сброса пароля
Пользователи с недопустимым паролем не смогут запросить письмо для сброса пароля через
PasswordResetView.
-
has_usable_password() -
Возвращает
Falseесли для данного пользователя был вызванset_unusable_password().
-
get_user_permissions(obj=None) -
Возвращает набор строк разрешений, которые у пользователя есть напрямую.
Если
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передаются методуUserдля настройки произвольных полей в модели пользователя настраиваемого пользователя.Примеры использования см. в разделе Создание пользователей.
-
create_superuser(username, email=None, password=None, **extra_fields) -
Аналогично
create_user(), но устанавливаетis_staffиis_superuserв значениеTrue.
-
with_perm(perm, is_active=True, include_superusers=True, backend=None, obj=None) -
Возвращает пользователей, имеющих заданное разрешение
perm, в формате"<app label>.<permission codename>"или как экземплярPermission. Возвращает пустой набор запросов, если не найдено пользователей с указанным разрешениемperm.Если
is_activeравноTrue(по умолчанию), возвращаются только активные пользователи; в противном случае — только неактивные. Используйте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[source] -
Базовый класс, предоставляющий стандартные реализации всех необходимых методов. По умолчанию он отклоняет любого пользователя и не предоставляет никаких разрешений.
-
get_user_permissions(user_obj, obj=None)[source] -
Возвращает пустое множество.
-
get_group_permissions(user_obj, obj=None)[source] -
Возвращает пустое множество.
-
get_all_permissions(user_obj, obj=None)[source] -
Использует
get_user_permissions()иget_group_permissions()для получения набора строк разрешений, которые имеетuser_obj.
-
has_perm(user_obj, perm, obj=None)[source] -
Использует
get_all_permissions()для проверки, имеет лиuser_objразрешениеperm.
-
-
class ModelBackend[source] -
Это по умолчанию используемый 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)[source] -
Пытается аутентифицировать
usernameсpassword, вызываяUser.check_password. Еслиusernameне предоставлен, он пытается получить имя пользователя изkwargsиспользуя ключCustomUser.USERNAME_FIELD. Возвращает аутентифицированного пользователя илиNone.request—HttpRequestи может бытьNoneесли он не был предоставленauthenticate()(который передаёт его в бэкенд).
-
get_user_permissions(user_obj, obj=None)[source] -
Возвращает набор строк разрешений, которыми обладает
user_objиз собственных разрешений пользователя. Возвращает пустой набор, еслиis_anonymousилиis_activeявляетсяFalse.
-
get_group_permissions(user_obj, obj=None)[source] -
Возвращает набор строк разрешений, которыми обладает
user_objиз разрешений групп, к которым они принадлежат. Возвращает пустой набор, еслиis_anonymousилиis_activeравноFalse.
-
get_all_permissions(user_obj, obj=None)[source] -
Возвращает набор строк разрешений, которыми обладает
user_obj, включая как разрешения пользователя, так и разрешения группы. Возвращает пустой набор, еслиis_anonymousилиis_activeравноFalse.
-
has_perm(user_obj, perm, obj=None)[source] -
Использует
get_all_permissions()для проверки, обладает лиuser_objразрешениемperm. ВозвращаетFalseесли пользователь неis_active.
-
has_module_perms(user_obj, app_label)[source] -
Возвращает, обладает ли
user_objкакими-либо разрешениями на приложениеapp_label.
-
user_can_authenticate()[source] -
Возвращает, разрешено ли пользователю выполнить аутентификацию. Чтобы соответствовать поведению
AuthenticationForm, котороеprohibits inactive users from logging in, этот метод возвращаетFalseдля пользователей сis_active=False. Пользовательские модели пользователей, у которых нет поляis_active, разрешены.
-
with_perm(perm, is_active=True, include_superusers=True, obj=None)[source] -
Возвращает всех активных пользователей, у которых есть разрешение
permв виде"<app label>.<permission codename>"или экземпляраPermission. Возвращает пустой набор результатов, если не найдено пользователей, у которых есть разрешениеperm.Если
is_activeравноTrue(по умолчанию), возвращает только активных пользователей, или еслиFalse, возвращает только неактивных пользователей. ИспользуйтеNoneчтобы вернуть всех пользователей независимо от состояния активности.Если
include_superusersравноTrue(по умолчанию), результат будет включать суперпользователей.
-
-
class AllowAllUsersModelBackend[source] -
Аналогично
ModelBackend, за исключением того, что он не отклоняет неактивных пользователей, так какuser_can_authenticate()всегда возвращаетTrue.При использовании этого бэкенда, вероятно, потребуется настроить
AuthenticationForm, используемыйLoginView, переопределяя методconfirm_login_allowed(), поскольку он отклоняет неактивных пользователей.
-
class RemoteUserBackend[source] -
Используйте этот бэкенд для использования аутентификации, обрабатываемой внешним по отношению к Django сервисом. Он выполняет аутентификацию, используя имена пользователей, переданные в
request.META['REMOTE_USER']. См. документацию по аутентификации по REMOTE_USER.Если вам нужен больший контроль, вы можете создать собственный бэкенд аутентификации, унаследовав его от этого класса и переопределив эти атрибуты или методы:
-
create_unknown_user -
TrueилиFalse. Определяет, будет ли создаваться объект пользователя, если он ещё не существует в базе данных. По умолчаниюTrue.
-
authenticate(request, remote_user)[source] -
Имя пользователя, переданное как
remote_user, считается надёжным. Этот метод возвращает объект пользователя с заданным именем пользователя, создавая новый объект пользователя, еслиcreate_unknown_userравноTrue.Возвращает
Noneеслиcreate_unknown_userравноFalseи объект пользователя с заданным именем пользователя не найден в базе данных.requestявляетсяHttpRequestи может бытьNoneесли он не был предоставленauthenticate()(который передает его бэкенду).
-
clean_username(username)[source] -
Выполняет любые очищения имени пользователя (например, удаление информации LDAP DN) перед использованием его для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
-
configure_user(request, user, created=True)[source] -
Настраивает пользователя при каждой попытке аутентификации. Этот метод вызывается сразу после извлечения или создания аутентифицируемого пользователя и может использоваться для выполнения пользовательских действий настройки, таких как установка групп пользователя на основе атрибутов в каталоге LDAP. Возвращает объект пользователя.
Настройка может выполняться либо один раз при создании пользователя (
createdравноTrue) либо для существующих пользователей (createdравноFalse) в качестве способа синхронизации атрибутов между удалённой и локальной системами.requestявляетсяHttpRequestи может бытьNoneесли он не был предоставленauthenticate()(который передаёт его бэкенду).
-
user_can_authenticate() -
Возвращает, разрешено ли пользователю пройти аутентификацию. Этот метод возвращает
Falseдля пользователей сis_active=False. Пользовательские модели пользователей, у которых нет поляis_active, разрешены.
-
-
class AllowAllUsersRemoteUserBackend[source] -
То же, что и
RemoteUserBackend, за исключением того, что он не отклоняет неактивных пользователей, посколькуuser_can_authenticateвсегда возвращаетTrue.
Функции-утилиты
-
get_user(request)[source]
-
aget_user(request) -
Асинхронная версия:
aget_user()Возвращает экземпляр модели пользователя, связанный с сессией заданного
request.Проверяет, присутствует ли бэкенд аутентификации, сохранённый в сессии, в
AUTHENTICATION_BACKENDS. Если да, то использует метод бэкендаget_user()для извлечения экземпляра модели пользователя, а затем проверяет сессию, вызывая метод модели пользователяget_session_auth_hash(). Если проверка не пройдена и предоставленыSECRET_KEY_FALLBACKS, то проверяет сессию по каждому резервному ключу, используяget_session_auth_fallback_hash().Возвращает экземпляр
AnonymousUser, если бэкенд аутентификации, сохранённый в сессии, больше не находится вAUTHENTICATION_BACKENDS, если метод бэкендаget_user()не возвращает пользователя, или если хэш аутентификации сессии не проходит проверку.Изменено в Django 5.0:aget_user()функция была добавлена.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.1/ref/contrib/auth/