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

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 не хранит необработанный пароль.) Необработанные пароли могут быть произвольной длины и содержать любые символы. Метаданные в этом поле могут пометить пароль как непригодный для использования. См. документацию по паролям.

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

Дата/время создания учетной записи.

Атрибуты

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

На практике вам, вероятно, не понадобится использовать объекты 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() или если хэш аутентификации сеанса не проходит проверку.

Back to Top