django.contrib.auth¶
В этом документе представлены справочные материалы по API для компонентов системы аутентификации Django. Более подробную информацию об использовании этих компонентов или о том, как настроить аутентификацию и авторизацию, см. в тематическом руководстве по аутентификации.
Пользовательская модель¶
- class models.User¶
Поля¶
- class models.User
Объекты
Userимеют следующие поля:- username¶
Необходимый. 150 символов или меньше. Имена пользователей могут содержать буквенно-цифровые символы, символы
_,@,+,.и-.max_lengthдолжно быть достаточно для многих случаев использования. Если вам нужна более длинная длина, используйте пользовательскую модель пользователя.
- first_name¶
Необязательно (
blank=True). 150 символов или меньше.
- last_name¶
Необязательно (
blank=True). 150 символов или меньше.
- email¶
Необязательно (
blank=True). Адрес электронной почты.
- password¶
Необходимый. Хэш и метаданные пароля. (Django не хранит необработанный пароль.) Необработанные пароли могут быть произвольной длины и содержать любые символы. Метаданные в этом поле могут пометить пароль как непригодный для использования. См. документацию по паролям.
- 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()¶
Возвращает имя пользователя для пользователя. Поскольку модель «Пользователь» можно заменить, вам следует использовать этот метод вместо прямой ссылки на атрибут имени пользователя.
- 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, возвращаются только права пользователя для этого конкретного объекта.Changed in Django 5.2:Добавлен метод
aget_user_permissions().
- get_group_permissions(obj=None)¶
- aget_group_permissions(obj=None)¶
Асинхронная версия:
aget_group_permissions()Возвращает набор строк разрешений, которые имеет пользователь в своих группах.
Если передан
obj, возвращаются только права группы для этого конкретного объекта.Changed in Django 5.2:Добавлен метод
aget_group_permissions().
- get_all_permissions(obj=None)¶
- aget_all_permissions(obj=None)¶
Асинхронная версия:
aget_all_permissions()Возвращает набор строк разрешений, которые имеет пользователь, как в рамках разрешений группы, так и разрешений пользователя.
Если передан
obj, возвращаются только разрешения для этого конкретного объекта.Changed in Django 5.2:Добавлен метод
aget_all_permissions().
- has_perm(perm, obj=None)¶
- ahas_perm(perm, obj=None)¶
Асинхронная версия:
ahas_perm()Возвращает
True, если у пользователя есть указанное разрешение, где разрешение имеет формат"<метка приложения>.<кодовое имя разрешения>". (см. документацию по permissions). Если пользователь неактивен, этот метод всегда будет возвращать «False». Для активного суперпользователя этот метод всегда будет возвращать True.Если передан
obj, этот метод будет проверять разрешения не для модели, а для этого конкретного объекта.Changed in Django 5.2:Добавлен метод ahas_perm().
- has_perms(perm_list, obj=None)¶
- ahas_perms(perm_list, obj=None)¶
Асинхронная версия:
ahas_perms()Возвращает
True, если у пользователя есть все указанные разрешения, где каждое разрешение имеет формат"<метка приложения>.<кодовое имя разрешения>". Если пользователь неактивен, этот метод всегда будет возвращать «False». Для активного суперпользователя этот метод всегда будет возвращать True.Если передан obj, этот метод будет проверять разрешения не для модели, а для конкретного объекта.
Changed in Django 5.2:Добавлен метод ahas_perms().
- has_module_perms(package_name)¶
- ahas_module_perms(package_name)¶
Асинхронная версия:
ahas_module_perms()Возвращает True, если у пользователя есть какие-либо разрешения в данном пакете (метка приложения Django). Если пользователь неактивен, этот метод всегда будет возвращать «False». Для активного суперпользователя этот метод всегда будет возвращать True.
Changed in 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`, чтобы разрешить установку произвольных полей в пользовательской модели пользователя.Пример использования см. в разделе Создание пользователей.
Changed in 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.Changed in Django 5.2:Добавлен метод
acreate_superuser().
- with_perm(perm, is_active=True, include_superusers=True, backend=None, obj=None)¶
Возвращает пользователей, имеющих данное разрешение
permлибо в формате"<метка приложения>.<кодовое имя разрешения>", либо в виде экземпляраPermission. Возвращает пустой набор запросов, если не найдено пользователей с разрешением.Если
is_activeимеет значениеTrue(по умолчанию), возвращаются только активные пользователи, а еслиFalse, возвращаются только неактивные пользователи. Используйте None, чтобы вернуть всех пользователей, независимо от их активного состояния.Если
include_superusersимеет значениеTrue(по умолчанию), результат будет включать суперпользователей.Если передан
backendи он определен вAUTHENTICATION_BACKENDS, то этот метод будет его использовать. В противном случае он будет использоватьбэкэндв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.
На практике вам, вероятно, не понадобится использовать объекты AnonymousUser самостоятельно, но они используются веб-запросами, как описано в следующем разделе.
Модель Разрешение¶
- class models.Permission¶
Поля¶
Объекты Permission имеют следующие поля:
- class models.Permission
- name¶
Необходимый. 255 символов или меньше. Пример:
'Может голосовать'.
- content_type¶
Необходимый. Внешний ключ модели
ContentType.
- codename¶
Необходимый. 100 символов или меньше. Пример:
'can_vote'.
Методы¶
Объекты Permission имеют стандартные методы доступа к данным, как и любая другая модель Django.
Групповая модель¶
- class models.Group¶
Поля¶
Объекты Group имеют следующие поля:
- class models.Group
- name¶
Необходимый. 150 символов или меньше. Допускаются любые символы. Пример:
'Потрясающие пользователи'.
- 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¶
Отправляется, когда пользователь успешно входит в систему.
Аргументы, отправленные с этим сигналом:
отправительКласс пользователя, который только что вошел в систему.
запросТекущий экземпляр
HttpRequest.пользовательЭкземпляр пользователя, который только что вошел в систему.
- user_logged_out¶
Отправляется при вызове метода выхода из системы.
отправительКак указано выше: класс пользователя, который только что вышел из системы, или «Нет», если пользователь не прошел аутентификацию.
запросТекущий экземпляр
HttpRequest.пользовательЭкземпляр пользователя, который только что вышел из системы, или «Нет», если пользователь не прошел аутентификацию.
- user_login_failed¶
Отправляется, когда пользователю не удалось успешно войти в систему
отправительИмя модуля, используемого для аутентификации.
учетные данныеСловарь аргументов ключевого слова, содержащий учетные данные пользователя, которые были переданы
authenticate()или вашему собственному пользовательскому серверу аутентификации. Учетные данные, соответствующие набору «конфиденциальных» шаблонов (включая пароль), не будут отправляться в открытом виде как часть сигнала.запросОбъект
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()Возвращает пустой набор.
Changed in Django 5.2:Добавлена функция
aget_user_permissions().
- get_group_permissions(user_obj, obj=None)¶
- aget_group_permissions(user_obj, obj=None)¶
Асинхронная версия:
aget_group_permissions()Возвращает пустой набор.
Changed in 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.Changed in 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.Changed in 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 не имеет значения None.with_perm()также позволяет передавать объект в качестве параметра, но в отличие от других методов он возвращает пустой набор запросов, еслиobj не имеет значения None.- authenticate(request, username=None, password=None, **kwargs)¶
- aauthenticate(request, username=None, password=None, **kwargs)¶
Асинхронная версия:
aauthenticate()Пытается аутентифицировать
имя пользователяс помощьюпароля, вызываяUser.check_password. Еслиusernameне указано, он пытается получить имя пользователя изkwargs, используя ключCustomUser.USERNAME_FIELD. Возвращает аутентифицированного пользователя илиNone.request— этоHttpRequestи может бытьNone, если он не был предоставленauthenticate()(который передает его на серверную часть).Changed in 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.Changed in 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.Changed in 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.Changed in 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.Changed in 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.Changed in Django 5.2:Добавлена функция ahas_module_perms().
- user_can_authenticate()¶
Возвращает, разрешено ли пользователю проходить аутентификацию. Чтобы соответствовать поведению
AuthenticationForm, которыйзапрещает неактивным пользователям входить в систему, этот метод возвращаетFalseдля пользователей сis_active=False. Разрешены пользовательские модели пользователей, у которых нет поляis_active.
- with_perm(perm, is_active=True, include_superusers=True, obj=None)¶
Возвращает всех активных пользователей, имеющих разрешение
permлибо в форме"<метка приложения>.<кодовое имя разрешения>", либо экземплярPermission. Возвращает пустой набор запросов, если не найдено пользователей с разрешением.Если
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.
- authenticate(request, remote_user)¶
- aauthenticate(request, remote_user)¶
Асинхронная версия:
aauthenticate()Имя пользователя, переданное как «remote_user», считается доверенным. Этот метод возвращает объект пользователя с заданным именем пользователя, создавая новый объект пользователя, если
create_unknown_userимеет значениеTrue.Возвращает None, если :attr:~RemoteUserBackend.create_unknown_user имеет значение False и объект User с данным именем пользователя не найден в базе данных.
request— этоHttpRequestи может бытьNone, если он не был предоставленauthenticate()(который передает его на серверную часть).Changed in Django 5.2:Добавлена функция
aauthenticate().
- clean_username(username)¶
Выполняет любую очистку
имя пользователя(например, удаление информации LDAP DN) перед его использованием для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
- configure_user(request, user, created=True)¶
- aconfigure_user(request, user, created=True)¶
Асинхронная версия:
aconfigure_user()Настраивает пользователя при каждой попытке аутентификации. Этот метод вызывается сразу после получения или создания аутентифицируемого пользователя и может использоваться для выполнения настраиваемых действий по настройке, таких как настройка групп пользователей на основе атрибутов в каталоге LDAP. Возвращает объект пользователя. Когда выборка или создание пользователя вызывается из синхронного контекста, вызывается
configure_user,aconfigure_userвызывается из асинхронного контекста.Настройку можно выполнить либо один раз при создании пользователя («созданный» имеет значение «True»), либо для существующих пользователей («созданный» имеет значение «False») как способ синхронизации атрибутов между удаленной и локальной системами.
request— этоHttpRequestи может бытьNone, если он не был предоставленauthenticate()(который передает его на серверную часть).Changed in 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()Возвращает экземпляр модели пользователя, связанный с данным сеансом запроса.
Он проверяет, присутствует ли сервер аутентификации, хранящийся в сеансе, в
AUTHENTICATION_BACKENDS. Если это так, он использует метод get_user() серверной части для получения экземпляра модели пользователя, а затем проверяет сеанс, вызывая методget_session_auth_hash()модели пользователя. Если проверка не удалась и предоставлена :setting:SECRET_KEY_FALLBACKS, она проверяет сеанс по каждому резервному ключу, используяget_session_auth_fallback_hash().Возвращает экземпляр
AnonymousUser, если бэкэнд аутентификации, хранящийся в сеансе, больше не находится вAUTHENTICATION_BACKENDS, если пользователь не возвращается методом бэкендаget_user()или если хэш аутентификации сеанса не проходит проверку.