django.contrib.auth
В этом документе представлена справочная информация по API компонентов системы аутентификации Django. Для получения более подробной информации об использовании этих компонентов или о том, как настроить аутентификацию и авторизацию, см. руководство по теме аутентификации.
User модель
-
class models.User
Поля
-
class models.User -
Userобъекты имеют следующие поля:-
username -
Обязательное. Длина не более 150 символов. Имена пользователей могут содержать символы латинского алфавита,
_,@,+,.и-.Значение
max_lengthдолжно быть достаточно для многих случаев использования. Если вам нужна большая длина, используйте пользовательскую модель. Если вы используете MySQL с кодировкойutf8mb4(рекомендуется для правильной поддержки Unicode), укажите не болееmax_length=191, так как MySQL по умолчанию может создавать уникальные индексы только с 191 символом в этом случае.Имена пользователей и Unicode
Django изначально принимал только символы ASCII в именах пользователей. Хотя это не было намеренным выбором, символы Unicode всегда принимались при использовании Python 3. В Django 1.10 официально была добавлена поддержка Unicode в именах пользователей, сохраняя поведение, учитывающее только ASCII, при использовании Python 2.
-
first_name -
Необязательное (
blank=True). Длина не более 30 символов.
-
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 admin возвращают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() -
Возвращает имя пользователя. Так как модель
Userможет быть заменена, следует использовать этот метод вместо прямой ссылки на атрибут 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() -
Помечает пользователя как не имеющего установленного пароля. Это отличается от пустой строки пароля.
check_password()для этого пользователя никогда не вернётTrue. Не сохраняет объектUser.Вам может потребоваться это, если аутентификация для вашего приложения происходит на основе существующего внешнего источника, например, каталога LDAP.
-
has_usable_password() -
Возвращает
False, если для этого пользователя был вызванset_unusable_password().Изменено в Django 2.1:В более старых версиях это также возвращает
False, если пароль являетсяNoneили пустой строкой, или если пароль использует хэширователь, который не находится в настройкеPASSWORD_HASHERS. Такое поведение считается ошибкой, так как это препятствует пользователям с такими паролями запрашивать сброс пароля.
-
get_group_permissions(obj=None) -
Возвращает набор строк разрешений, имеющихся у пользователя через его группы.
Если
objпередано, возвращает только групповые разрешения для этого объекта.
-
get_all_permissions(obj=None) -
Возвращает набор строк разрешений, имеющихся у пользователя как через групповые, так и через пользовательские разрешения.
Если
objпередано, возвращает только разрешения для этого конкретного объекта.
-
has_perm(perm, obj=None) -
Возвращает
True, если у пользователя есть указанное разрешение, где perm имеет формат"<app label>.<permission codename>". (см. документацию по разрешениям). Если пользователь неактивен, этот метод всегда возвращаетFalse. Для активного суперпользователя этот метод всегда возвращаетTrue.Если
objпередано, этот метод не будет проверять разрешение для модели, а для этого конкретного объекта.
-
has_perms(perm_list, obj=None) -
Возвращает
True, если у пользователя есть каждое из указанных разрешений, где каждое perm имеет формат"<app label>.<permission codename>". Если пользователь неактивен, этот метод всегда возвращает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, password, **extra_fields) -
То же, что и
create_user(), но устанавливаетis_staffиis_superuserв значениеTrue.
-
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 объекты имеют следующие поля:
-
class models.Permission -
-
name -
Обязательно. Максимальная длина 255 символов. Пример:
'Can vote'.
-
content_type -
Обязательно. Ссылка на базу данных таблицу
django_content_type, которая содержит запись для каждой установленной модели.
-
codename -
Обязательно. Максимальная длина 100 символов. Пример:
'can_vote'.
-
Методы
Permission объекты имеют стандартные методы доступа к данным, как и любая другая Django модель.
Group модель
-
class models.Group
Поля
Group объекты имеют следующие поля:
-
class models.Group -
-
name -
Обязательно. Максимальная длина 150 символов. Разрешены любые символы. Пример:
'Awesome Users'.Изменено в Django 2.2:Максимальная длина поля
max_lengthувеличена с 80 до 150 символов.
-
permissions -
Поле "многие-ко-многим" для
Permission:group.permissions.set([permission_list]) group.permissions.add(permission, permission, ...) group.permissions.remove(permission, permission, ...) group.permissions.clear()
-
Валидаторы
-
class validators.ASCIIUsernameValidator -
Валидатор поля, разрешающий только латинские буквы и цифры, а также
@,.,+,-, и_.
-
class validators.UnicodeUsernameValidator -
Валидатор поля, разрешающий символы Юникода, а также
@,.,+,-, и_. По умолчанию используется для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. Информацию о том, как их использовать и как создавать собственные модули аутентификации, см. в разделе Другие источники аутентификации руководства по аутентификации пользователей User authentication guide.
Доступные модули аутентификации
Следующие модули доступны в django.contrib.auth.backends:
-
class ModelBackend -
Это стандартный модуль аутентификации, используемый Django. Он выполняет аутентификацию, используя учетные данные, состоящие из идентификатора пользователя и пароля. Для стандартной модели пользователей Django идентификатор пользователя — это имя пользователя, для пользовательских моделей — поле, указанное в USERNAME_FIELD (см. Настройка пользователей и аутентификации).
Он также обрабатывает стандартную модель разрешений, как определено для
UserиPermissionsMixin.has_perm(),get_all_permissions(),get_user_permissions()иget_group_permissions()позволяют передавать объект в качестве параметра для разрешений, специфичных для объекта, но этот модуль не реализует их, кроме возвращения пустого набора разрешений, еслиobj is not None.-
authenticate(request, username=None, password=None, **kwargs) -
Пытается выполнить аутентификацию
usernameсpassword, вызывая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, котороеprohibits inactive users from logging in, этот метод возвращаетFalseдля пользователей сis_active=False. Пользовательские модели, у которых нет поляis_active, разрешены.
-
-
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еслиcreate_unknown_userимеет значениеFalseи объект пользователя с заданным именем пользователя не найден в базе данных.requestэтоHttpRequestи может бытьNoneесли он не был передан вauthenticate()(который передает его в бэкенд).
-
clean_username(username) -
Выполняет очистку имени пользователя (например, удаляет информацию из LDAP DN) перед использованием его для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
-
configure_user(request, user) -
Настраивает вновь созданного пользователя. Этот метод вызывается сразу после создания нового пользователя и может использоваться для выполнения пользовательских действий настройки, таких как установка групп пользователя на основе атрибутов в каталоге LDAP. Возвращает объект пользователя.
requestэтоHttpRequestи может бытьNoneесли он не был передан вauthenticate()(который передает его в бэкенд).Изменено в Django 2.2:Добавлен аргумент
request. Поддержка переопределений методов, которые его не принимают, будет удалена в Django 3.1.
-
user_can_authenticate() -
Возвращает, разрешено ли пользователю пройти аутентификацию. Этот метод возвращает
Falseдля пользователей сis_active=False. Пользовательские модели пользователей, у которых нет поляis_active, разрешены.
-
-
class AllowAllUsersRemoteUserBackend -
То же, что и
RemoteUserBackend, за исключением того, что он не отклоняет неактивных пользователей, так какuser_can_authenticateвсегда возвращаетTrue.
Вспомогательные функции
-
get_user(request)[source] -
Возвращает экземпляр модели пользователя, связанный с заданной сессией.
Проверяет, присутствует ли бэкенд аутентификации, сохранённый в сессии, в
AUTHENTICATION_BACKENDS. Если да, то используется метод бэкендаget_user()для извлечения экземпляра модели пользователя, а затем проверяется сессия, вызывая метод модели пользователяget_session_auth_hash().Возвращает экземпляр
AnonymousUser, если сохранённый в сессии бэкенд аутентификации больше не присутствует вAUTHENTICATION_BACKENDS, если метод бэкендаget_user()не возвращает пользователя или если хэш аутентификации сессии не валиден.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.2/ref/contrib/auth/