• 3.1
  • 5.0
  • 6.1
  • Версия документации: 3.2

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_length increased 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.

groups

Отношение «многие ко многим» к Group

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 False instead 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 return True. Doesn’t save the User object.

Это может вам понадобиться, если аутентификация вашего приложения осуществляется на основе существующего внешнего источника, такого как каталог LDAP.

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, если у пользователя есть указанное разрешение, где разрешение имеет формат "<метка приложения>.<кодовое имя разрешения>". (см. документацию по 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.

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 со следующими отличиями:

На практике вам, вероятно, не понадобится использовать объекты AnonymousUser самостоятельно, но они используются веб-запросами, как описано в следующем разделе.

Модель Разрешение

class models.Permission

Поля

Объекты Permission имеют следующие поля:

class models.Permission
name

Необходимый. 255 символов или меньше. Пример: 'Может голосовать'.

content_type

Необходимый. Ссылка на таблицу базы данных django_content_type, которая содержит записи для каждой установленной модели.

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)

Возвращает пустой набор.

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)

Возвращает всех активных пользователей, имеющих разрешение 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’s get_user() method to retrieve the user model instance and then verifies the session by calling the user model’s get_session_auth_hash() method.

Возвращает экземпляр AnonymousUser, если бэкэнд аутентификации, хранящийся в сеансе, больше не находится в AUTHENTICATION_BACKENDS, если пользователь не возвращается методом бэкенда get_user() или если хэш аутентификации сеанса не проходит проверку.

Back to Top