django.contrib.auth
В данном документе приводится справочная информация по API для компонентов системы аутентификации Django. Для получения более подробной информации об использовании этих компонентов или о том, как настроить аутентификацию и авторизацию, см. руководство по аутентификации.
User модель
-
class models.User
Поля
- classmodels.User
-
Userобъекты имеют следующие поля:-
username -
Обязательное поле. Длина не более 150 символов. Имена пользователей могут содержать буквенно-цифровые символы,
_,@,+,.и-символы.Данной длины должно быть достаточно для многих случаев использования. Если вам требуется большая длина, пожалуйста, используйте пользовательскую модель.
-
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 admin возвращаютFalseдля неактивных пользователей.
-
is_superuser -
Булево значение. Считает этого пользователя обладающим всеми правами без присвоения ему каких-либо конкретных разрешений.
-
last_login -
Дата и время последнего входа пользователя.
-
date_joined -
Дата и время создания учетной записи.
-
Атрибуты
- classmodels.User
-
-
is_authenticated -
Только для чтения атрибут, который всегда
True(в отличие отAnonymousUser.is_authenticated, который всегдаFalse). Это способ узнать, был ли пользователь аутентифицирован. Это не подразумевает никаких разрешений и не проверяет, активен ли пользователь или у него есть действительная сессия. Хотя обычно вы будете проверять этот атрибут наrequest.user, чтобы узнать, был ли он заполненAuthenticationMiddleware(представляющий текущего вошедшего пользователя), вы должны знать, что этот атрибут являетсяTrueдля любогоUserэкземпляра.
-
is_anonymous -
Только для чтения атрибут, который всегда
False. Это способ различатьUserиAnonymousUserобъекты. Как правило, вы должны предпочесть использоватьis_authenticatedэтому атрибуту.
-
Методы
- classmodels.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, если заданная строка — правильный пароль для пользователя. (Это обрабатывает хэширование пароля при сравнении.)
-
set_unusable_password() -
Отмечает пользователя как не имеющего установленного пароля, обновляя метаданные в поле
password. Это не то же самое, что пустая строка в качестве пароля.check_password()для этого пользователя никогда не вернётTrue. Не сохраняет объектUser.Это может потребоваться, если аутентификация для вашего приложения происходит с помощью внешнего источника, например, каталога LDAP.
Ограничение сброса пароля
Пользователи с недопустимым паролем не смогут запросить письмо для сброса пароля через
PasswordResetView.
-
has_usable_password() -
Возвращает
False, если для этого пользователя был вызванset_unusable_password().
-
get_user_permissions(obj=None)
-
aget_user_permissions(obj=None) -
Асинхронная версия:
aget_user_permissions()Возвращает набор строк разрешений, имеющихся у пользователя напрямую.
Если
objпередано, возвращает только разрешения пользователя для этого конкретного объекта.Изменено в Django 5.2:aget_user_permissions()метод был добавлен.
-
get_group_permissions(obj=None)
-
aget_group_permissions(obj=None) -
Асинхронная версия:
aget_group_permissions()Возвращает набор строк разрешений, имеющихся у пользователя через их группы.
Если
objпередано, возвращает только разрешения группы для этого конкретного объекта.Изменено в Django 5.2:aget_group_permissions()метод был добавлен.
-
get_all_permissions(obj=None)
-
aget_all_permissions(obj=None) -
Асинхронная версия:
aget_all_permissions()Возвращает набор строк разрешений, имеющихся у пользователя через группы и пользовательские разрешения.
Если
objпередано, возвращает только разрешения для этого конкретного объекта.Изменено в Django 5.2:aget_all_permissions()метод был добавлен.
-
has_perm(perm, obj=None)
-
ahas_perm(perm, obj=None) -
Асинхронная версия:
ahas_perm()Возвращает
True, если у пользователя есть указанное разрешение, где perm в формате"<app label>.<permission codename>". (см. документацию по разрешениям). Если пользователь неактивен, этот метод всегда возвращаетFalse. Для активного суперпользователя этот метод всегда возвращаетTrue.Если
objпередано, этот метод не будет проверять разрешение для модели, а для этого конкретного объекта.Изменено в Django 5.2:ahas_perm()метод был добавлен.
-
has_perms(perm_list, obj=None)
-
ahas_perms(perm_list, obj=None) -
Асинхронная версия:
ahas_perms()Возвращает
True, если у пользователя есть каждое из указанных разрешений, где каждое perm в формате"<app label>.<permission codename>". Если пользователь неактивен, этот метод всегда возвращаетFalse. Для активного суперпользователя этот метод всегда возвращаетTrue.Если
objпередано, этот метод не будет проверять разрешения для модели, а для этого конкретного объекта.Изменено в Django 5.2:ahas_perms()метод был добавлен.
-
has_module_perms(package_name)
-
ahas_module_perms(package_name) -
Асинхронная версия:
ahas_module_perms()Возвращает
True, если у пользователя есть какие-либо разрешения в заданном пакете (идентификаторе Django приложения). Если пользователь неактивен, этот метод всегда возвращаетFalse. Для активного суперпользователя этот метод всегда возвращаетTrue.Изменено в Django 5.2:ahas_module_perms()метод был добавлен.
-
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)
-
acreate_user(username, email=None, password=None, **extra_fields) -
Асинхронная версия:
acreate_user()Создаёт, сохраняет и возвращает
User.Значения
usernameиpasswordустанавливаются, как задано. Часть доменаemailавтоматически преобразуется в нижний регистр, и возвращённый объектUserбудет иметьis_active, установленным вTrue.Если пароль не предоставлен, вызывается
set_unusable_password().Если электронная почта не предоставлена,
emailбудет установлена в пустую строку.Ключевые аргументы
extra_fieldsпередаются в метод__init__объектаUser, чтобы разрешить установку произвольных полей в модели пользовательского профиля пользовательской модели.Пример использования см. в создании пользователей.
Изменено в Django 5.2:был добавлен метод
acreate_user().
-
create_superuser(username, email=None, password=None, **extra_fields)
-
acreate_superuser(username, email=None, password=None, **extra_fields) -
Асинхронная версия:
acreate_superuser()Аналогично
create_user(), но устанавливаетis_staffиis_superuserв значениеTrue.Изменено в Django 5.2:был добавлен метод
acreate_superuser().
-
with_perm(perm, is_active=True, include_superusers=True, backend=None, obj=None) -
Возвращает пользователей, у которых есть указанное разрешение
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 объекты имеют следующие поля:
- classmodels.Permission
-
-
name -
Обязательное. Не более 255 символов. Пример:
'Can vote'.
-
content_type -
Обязательное. Внешний ключ к модели
ContentType.
-
codename -
Обязательное. Не более 100 символов. Пример:
'can_vote'.
-
Методы
Permission объекты имеют стандартные методы доступа к данным, как и любая другая Django модель.
Group модель
-
class models.Group
Поля
Group имеют следующие поля:
- classmodels.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 -
Проверяющее правило поля, допускающее Unicode символы, в дополнение к
@,.,+,-и_. Проверяющее правило по умолчанию для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]
-
aget_user_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_user_permissions()Возвращает пустой набор.
Изменено в Django 5.2:aget_user_permissions()функция была добавлена.
-
get_group_permissions(user_obj, obj=None)[source]
-
aget_group_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_group_permissions()Возвращает пустой набор.
Изменено в Django 5.2:aget_group_permissions()функция была добавлена.
-
get_all_permissions(user_obj, obj=None)[source]
-
aget_all_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_all_permissions()Использует
get_user_permissions()иget_group_permissions()для получения набора строк разрешений, которые имеетuser_obj.Изменено в Django 5.2:aget_all_permissions()функция была добавлена.
-
has_perm(user_obj, perm, obj=None)[source]
-
ahas_perm(user_obj, perm, obj=None) -
Асинхронная версия:
ahas_perm()Использует
get_all_permissions()для проверки, имеет лиuser_objстроку разрешенияperm.Изменено в Django 5.2:ahas_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]
-
aauthenticate(request, username=None, password=None, **kwargs) -
Асинхронная версия:
aauthenticate()Пытается аутентифицировать
usernameсpassword, вызываяUser.check_password. Еслиusernameне предоставлен, он пытается получить имя пользователя изkwargs, используя ключCustomUser.USERNAME_FIELD. Возвращает аутентифицированного пользователя илиNone.request—HttpRequestи может бытьNone, если он не был передан вauthenticate()(который передает его в модуль).Изменено в Django 5.2:aauthenticate()функция была добавлена.
-
get_user_permissions(user_obj, obj=None)[source]
-
aget_user_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_user_permissions()Возвращает набор строк разрешений, которые имеет
user_objпо своим пользовательским разрешениям. Возвращает пустой набор, еслиis_anonymousилиis_activeравноFalse.Изменено в Django 5.2:aget_user_permissions()функция была добавлена.
-
get_group_permissions(user_obj, obj=None)[source]
-
aget_group_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_group_permissions()Возвращает набор строк разрешений, которые имеет
user_objпо разрешениям групп, к которым он принадлежит. Возвращает пустой набор, еслиis_anonymousилиis_activeравноFalse.Изменено в Django 5.2:aget_group_permissions()функция была добавлена.
-
get_all_permissions(user_obj, obj=None)[source]
-
aget_all_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_all_permissions()Возвращает набор строк разрешений, которые имеет
user_obj, включая разрешения пользователя и разрешения группы. Возвращает пустой набор, еслиis_anonymousилиis_activeравноFalse.Изменено в Django 5.2:aget_all_permissions()функция была добавлена.
-
has_perm(user_obj, perm, obj=None)[source]
-
ahas_perm(user_obj, perm, obj=None) -
Асинхронная версия:
ahas_perm()Использует
get_all_permissions()для проверки наличия уuser_objразрешенияperm. ВозвращаетFalse, если пользователь неis_active.Изменено в Django 5.2:ahas_perm()функция была добавлена.
-
has_module_perms(user_obj, app_label)[source]
-
ahas_module_perms(user_obj, app_label) -
Асинхронная версия:
ahas_module_perms()Возвращает, имеет ли
user_objкакие-либо разрешения на приложениеapp_label.Изменено в Django 5.2:ahas_module_perms()функция была добавлена.
-
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]
-
aauthenticate(request, remote_user) -
Асинхронная версия:
aauthenticate()Переданное имя пользователя как
remote_userсчитается надёжным. Этот метод возвращает объект пользователя с заданным именем пользователя, создавая новый объект пользователя, еслиcreate_unknown_userравноTrue.Возвращает
None, еслиcreate_unknown_userравноFalseи объект пользователя с заданным именем пользователя не найден в базе данных.request— объектHttpRequestи может бытьNone, если он не был передан вauthenticate()(который передаёт его бэкенду).Изменено в Django 5.2:aauthenticate()функция была добавлена.
-
clean_username(username)[source] -
Выполняет любые очистные операции с именем пользователя (например, удаление информации DN LDAP) перед использованием его для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
-
configure_user(request, user, created=True)[source]
-
aconfigure_user(request, user, created=True) -
Асинхронная версия:
aconfigure_user()Настраивает пользователя при каждой попытке аутентификации. Этот метод вызывается сразу после получения или создания аутентифицируемого пользователя и может быть использован для выполнения пользовательских действий настройки, таких как установка групп пользователя на основе атрибутов в каталоге LDAP. Возвращает объект пользователя. При вызове получения или создания пользователя из синхронного контекста, вызывается
configure_user,aconfigure_userвызывается из асинхронных контекстов.Настройка может быть выполнена либо один раз при создании пользователя (
createdравноTrue), либо для существующих пользователей (createdравноFalse) в качестве способа синхронизации атрибутов между удалённой и локальной системами.request— объектHttpRequestи может бытьNone, если он не был передан вauthenticate()(который передаёт его бэкенду).Изменено в Django 5.2:aconfigure_user()функция была добавлена.
-
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 Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.2/ref/contrib/auth/