django.contrib.auth
В этом документе представлена справочная информация по API компонентов системы аутентификации Django. Подробнее об использовании этих компонентов и настройке аутентификации и авторизации см. в руководстве по аутентификации.
User модели
-
class models.User
Поля
- classmodels.User
-
Объекты
Userимеют следующие поля:-
username -
Обязательное поле. Не более 150 символов. Имя пользователя может содержать буквенно-цифровые символы,
_,@,+,.и-.Для многих вариантов использования длины
max_lengthбудет достаточно. Если вам требуется большая длина, используйте пользовательскую модель пользователя.
-
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 -
Дата и время создания учётной записи.
-
Атрибуты
- classmodels.User
-
-
is_authenticated -
Атрибут только для чтения, значение которого всегда равно
True(в отличие отAnonymousUser.is_authenticated, значение которого всегда равноFalse). Он позволяет определить, прошёл ли пользователь аутентификацию. Это не означает наличие у него каких-либо разрешений и не проверяет, активен ли пользователь и есть ли у него действительный сеанс. Обычно этот атрибут проверяют уrequest.user, чтобы узнать, был ли объект заполнен посредствомAuthenticationMiddleware(представляющего текущего пользователя, вошедшего в систему), однако следует учитывать, что у любого экземпляраUserзначение этого атрибута равноTrue.
-
is_anonymous -
Атрибут только для чтения, значение которого всегда равно
False. Он позволяет различать объектыUserиAnonymousUser. Как правило, вместо этого атрибута следует использоватьis_authenticated.
-
Методы
- classmodels.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)
-
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[исходный код] -
Базовый класс, предоставляющий реализации по умолчанию для всех необходимых методов. По умолчанию он отклоняет всех пользователей и не предоставляет никаких разрешений.
-
get_user_permissions(user_obj, obj=None)[исходный код]
-
aget_user_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_user_permissions()Возвращает пустое множество.
Изменено в Django 5.2:Добавлена функция
aget_user_permissions().
-
get_group_permissions(user_obj, obj=None)[исходный код]
-
aget_group_permissions(user_obj, obj=None) -
Асинхронная версия:
aget_group_permissions()Возвращает пустое множество.
Изменено в Django 5.2:Добавлена функция
aget_group_permissions().
-
get_all_permissions(user_obj, obj=None)[исходный код]
-
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)[исходный код]
-
ahas_perm(user_obj, perm, obj=None) -
Асинхронная версия:
ahas_perm()Использует
get_all_permissions(), чтобы проверить, есть ли уuser_objстрока разрешенияperm.Изменено в Django 5.2:Добавлена функция
ahas_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)[исходный код]
-
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)[исходный код]
-
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)[исходный код]
-
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)[исходный код]
-
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)[исходный код]
-
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)[исходный код]
-
ahas_module_perms(user_obj, app_label) -
Асинхронная версия:
ahas_module_perms()Возвращает информацию о том, есть ли у
user_objкакие-либо разрешения в приложенииapp_label.Изменено в Django 5.2:Добавлена функция
ahas_module_perms().
-
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)[исходный код] -
Возвращает всех активных пользователей, имеющих разрешение
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)[исходный код]
-
aauthenticate(request, remote_user) -
Асинхронная версия:
aauthenticate()Имя пользователя, переданное как
remote_user, считается доверенным. Этот метод возвращает объект пользователя с указанным именем пользователя и создает новый объект пользователя, еслиcreate_unknown_userимеет значениеTrue.Возвращает
None, еслиcreate_unknown_userимеет значениеFalseи объектUserс указанным именем пользователя не найден в базе данных.request— этоHttpRequest; его значение может бытьNone, если он не был передан вauthenticate()(который передает его бэкенду).Изменено в Django 5.2:Добавлена функция
aauthenticate().
-
clean_username(username)[исходный код] -
Выполняет очистку
username(например, удаляет информацию DN LDAP) перед использованием для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
-
configure_user(request, user, created=True)[исходный код]
-
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[исходный код] -
То же, что и
RemoteUserBackend, за исключением того, что он не отклоняет неактивных пользователей, посколькуuser_can_authenticateвсегда возвращаетTrue.
Вспомогательные функции
-
get_user(request)[исходный код]
-
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/6.0/ref/contrib/auth/