django.contrib.auth¶
В этом документе представлены справочные материалы по API для компонентов системы аутентификации Django. Более подробную информацию об использовании этих компонентов или о том, как настроить аутентификацию и авторизацию, см. в тематическом руководстве по аутентификации.
Пользовательская модель¶
- class models.User¶
Поля¶
- class models.User
Объекты
Userимеют следующие поля:- username¶
Необходимый. 150 символов или меньше. Имена пользователей могут содержать буквенно-цифровые символы, символы
_,@,+,.и-.max_lengthдолжно быть достаточно для многих случаев использования. Если вам нужна более длинная длина, используйте пользовательскую модель пользователя. Если вы используете MySQL с кодировкойutf8mb4(рекомендуется для правильной поддержки Unicode), укажите не болееmax_length=191, поскольку в этом случае MySQL может создавать только уникальные индексы со 191 символом по умолчанию.
- first_name¶
Необязательно (
blank=True). 150 символов или меньше.Changed in Django 3.1:The
max_lengthincreased from 30 to 150 characters.
- last_name¶
Необязательно (
blank=True). 150 символов или меньше.
- email¶
Необязательно (
blank=True). Адрес электронной почты.
- password¶
Required. A hash of, and metadata about, the password. (Django doesn’t store the raw password.) Raw passwords can be arbitrarily long and can contain any character. See the password documentation.
- user_permissions¶
Отношение «многие ко многим» к
Permission
- is_staff¶
Boolean. Designates whether this user can access the admin site.
- is_active¶
Boolean. Designates whether this user account should be considered active. We recommend that you set this flag to
Falseinstead of deleting accounts; that way, if your applications have any foreign keys to users, the foreign keys won’t break.Это не обязательно определяет, может ли пользователь войти в систему. Серверные программы аутентификации не обязаны проверять наличие флага
is_active, но это делают серверные программы по умолчанию (ModelBackend) иRemoteUserBackend. Вы можете использоватьAllowAllUsersModelBackendилиAllowAllUsersRemoteUserBackend, если вы хотите разрешить неактивным пользователям входить в систему. В этом случае вам также потребуется настроитьAuthenticationForm, используемыйLoginView, поскольку он отклоняет неактивных пользователей. Имейте в виду, что методы проверки разрешений, такие какhas_perm()и аутентификация в администраторе Django, возвращаютFalseдля неактивных пользователей.
- is_superuser¶
Boolean. Designates that this user has all permissions without explicitly assigning them.
- last_login¶
Дата и время последнего входа пользователя в систему.
- date_joined¶
A datetime designating when the account was created. Is set to the current date/time by default when the account is created.
Атрибуты¶
- 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)¶
Возвращает
True, если данная необработанная строка является правильным паролем для пользователя. (Это обеспечивает хеширование пароля при сравнении.)
- set_unusable_password()¶
Marks the user as having no password set. This isn’t the same as having a blank string for a password.
check_password()for this user will never returnTrue. Doesn’t save theUserobject.Это может вам понадобиться, если аутентификация вашего приложения осуществляется на основе существующего внешнего источника, такого как каталог LDAP.
- has_usable_password()¶
Возвращает
False, если для этого пользователя была вызванаset_unusable_password().
- get_user_permissions(obj=None)¶
- New in Django 3.0.
Возвращает набор строк разрешений, которые есть непосредственно у пользователя.
Если передан
obj, возвращаются только права пользователя для этого конкретного объекта.
- get_group_permissions(obj=None)¶
Возвращает набор строк разрешений, которые имеет пользователь в своих группах.
Если передан
obj, возвращаются только права группы для этого конкретного объекта.
- get_all_permissions(obj=None)¶
Возвращает набор строк разрешений, которые имеет пользователь, как в рамках разрешений группы, так и разрешений пользователя.
Если передан
obj, возвращаются только разрешения для этого конкретного объекта.
- has_perm(perm, obj=None)¶
Возвращает
True, если у пользователя есть указанное разрешение, где разрешение имеет формат"<метка приложения>.<кодовое имя разрешения>". (см. документацию по permissions). Если пользователь неактивен, этот метод всегда будет возвращать «False». Для активного суперпользователя этот метод всегда будет возвращать True.Если передан
obj, этот метод будет проверять разрешения не для модели, а для этого конкретного объекта.
- has_perms(perm_list, obj=None)¶
Возвращает
True, если у пользователя есть все указанные разрешения, где каждое разрешение имеет формат"<метка приложения>.<кодовое имя разрешения>". Если пользователь неактивен, этот метод всегда будет возвращать «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.Changed in Django 3.0:The
emailandpasswordparameters were made optional.
- with_perm(perm, is_active=True, include_superusers=True, backend=None, obj=None)¶
- New in Django 3.0.
Возвращает пользователей, имеющих данное разрешение
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 имеют следующие поля:
Методы¶
Объекты 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¶
- New in 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 не имеет значения None.with_perm()также позволяет передавать объект в качестве параметра, но в отличие от других методов он возвращает пустой набор запросов, еслиobj не имеет значения None.- authenticate(request, username=None, password=None, **kwargs)¶
Пытается аутентифицировать
имя пользователяс помощьюпароля, вызывая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, которыйзапрещает неактивным пользователям входить в систему, этот метод возвращаетFalseдля пользователей сis_active=False. Разрешены пользовательские модели пользователей, у которых нет поляis_active.
- with_perm(perm, is_active=True, include_superusers=True, obj=None)¶
- New in Django 3.0.
Возвращает всех активных пользователей, имеющих разрешение
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)¶
Имя пользователя, переданное как «remote_user», считается доверенным. Этот метод возвращает объект пользователя с заданным именем пользователя, создавая новый объект пользователя, если
create_unknown_userимеет значениеTrue.Возвращает None, если :attr:~RemoteUserBackend.create_unknown_user имеет значение False и объект User с данным именем пользователя не найден в базе данных.
request— этоHttpRequestи может бытьNone, если он не был предоставленauthenticate()(который передает его на серверную часть).
- clean_username(username)¶
Выполняет любую очистку
имя пользователя(например, удаление информации LDAP DN) перед его использованием для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
- configure_user(request, user)¶
Configures a newly created user. This method is called immediately after a new user is created, and can be used to perform custom setup actions, such as setting the user’s groups based on attributes in an LDAP directory. Returns the user object.
request— этоHttpRequestи может бытьNone, если он не был предоставленauthenticate()(который передает его на серверную часть).
- user_can_authenticate()¶
Возвращает, разрешено ли пользователю проходить аутентификацию. Этот метод возвращает False для пользователей с
is_active=False. Разрешены пользовательские модели пользователей, у которых нет поляis_active.
- class AllowAllUsersRemoteUserBackend¶
То же, что и
RemoteUserBackend, за исключением того, что он не отклоняет неактивных пользователей, посколькуuser_can_authenticateвсегда возвращаетTrue.
Вспомогательные функции¶
- get_user(request)¶
Возвращает экземпляр модели пользователя, связанный с данным сеансом запроса.
It checks if the authentication backend stored in the session is present in
AUTHENTICATION_BACKENDS. If so, it uses the backend’sget_user()method to retrieve the user model instance and then verifies the session by calling the user model’sget_session_auth_hash()method.Возвращает экземпляр
AnonymousUser, если бэкэнд аутентификации, хранящийся в сеансе, больше не находится вAUTHENTICATION_BACKENDS, если пользователь не возвращается методом бэкендаget_user()или если хэш аутентификации сеанса не проходит проверку.