django.contrib.auth
В этом документе представлена справочная информация по API для компонентов системы аутентификации Django. Для получения более подробной информации об использовании этих компонентов или о том, как настроить аутентификацию и авторизацию, см. руководство по теме аутентификации.
User модель
Поля
-
class models.User -
Userобъекты имеют следующие поля:-
username -
Обязательное. 150 символов или меньше. Имена пользователей могут содержать алфавитно-цифровые символы,
_,@,+,.и-символы.Значение
max_lengthдолжно быть достаточным для большинства случаев использования. Если вам нужен больший размер, используйте настраиваемую модель пользователя. Если вы используете MySQL с кодировкойutf8mb4(рекомендуется для правильной поддержки Unicode), укажите не болееmax_length=191символов, так как MySQL по умолчанию может создавать уникальные индексы только с 191 символом в этом случае.Имена пользователей и Unicode
Изначально Django принимал только латинские буквы и цифры в именах пользователей. Хотя это не было осознанным выбором, символы Unicode всегда принимались при использовании Python 3. Django 1.10 официально добавил поддержку Unicode в именах пользователей, сохраняя поведение только ASCII для Python 2.
Изменено в Django 1.10:Значение
max_lengthувеличено с 30 до 150 символов.
-
first_name -
Необязательно (
blank=True). 30 символов или меньше.
-
last_name -
Необязательно (
blank=True). 30 символов или меньше.
-
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для неактивных пользователей.Изменено в Django 1.10:В старых версиях
ModelBackendиRemoteUserBackendпозволяли неактивным пользователям выполнять аутентификацию.
-
is_superuser -
Булево. Указывает, что у этого пользователя есть все разрешения без явного их назначения.
-
last_login -
Дата и время последнего входа пользователя.
-
date_joined -
Дата и время создания учётной записи. По умолчанию устанавливается текущей датой и временем при создании учётной записи.
-
Атрибуты
-
class models.User -
-
is_authenticated -
Только для чтения атрибут, который всегда
True(в отличие отAnonymousUser.is_authenticated, который всегдаFalse). Это способ определить, был ли пользователь аутентифицирован. Это не подразумевает никаких разрешений и не проверяет, активен ли пользователь или у него есть действительная сессия. Хотя обычно вы проверяете этот атрибут вrequest.userдля того, чтобы узнать, был ли он заполненAuthenticationMiddleware(представляя текущего вошедшего пользователя), вы должны знать, что этот атрибутTrueдля любого экземпляраUser.Изменено в Django 1.10:В более старых версиях это был метод. Поддержка обратной совместимости для использования его в качестве метода будет удалена в Django 2.0.
Не используйте оператор
isдля сравнений!Чтобы атрибуты
is_authenticatedиis_anonymousтакже работали как методы, атрибуты являютсяCallableBoolобъектами. Таким образом, до тех пор, пока срок действия устаревания не закончится в Django 2.0, вы не можете сравнивать эти свойства с помощью оператораis. То есть,request.user.is_authenticated is Trueвсегда оцениваются какFalse.
-
is_anonymous -
Только для чтения атрибут, который всегда
False. Это способ отличить объектыUserиAnonymousUser. Как правило, вы должны предпочесть использоватьis_authenticatedэтому атрибуту.Изменено в Django 1.10:В более старых версиях это был метод. Поддержка обратной совместимости для использования его в качестве метода будет удалена в Django 2.0.
-
Методы
-
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()был вызван для этого пользователя.
-
get_group_permissions(obj=None) -
Возвращает набор строк разрешений, имеющихся у пользователя через свои группы.
Если
objпередано, возвращает только разрешения группы для этого конкретного объекта.
-
get_all_permissions(obj=None) -
Возвращает набор строк разрешений, имеющихся у пользователя, как через разрешения группы, так и через разрешения пользователя.
Если
objпередано, возвращает только разрешения для этого конкретного объекта.
-
has_perm(perm, obj=None) -
Возвращает
True, если пользователь имеет указанное разрешение, где perm имеет формат"<app label>.<permission codename>". (см. документацию по разрешениям). Если пользователь неактивен, этот метод всегда возвращаетFalse.Если
objпередано, этот метод не будет проверять разрешение для модели, а для этого конкретного объекта.
-
has_perms(perm_list, obj=None) -
Возвращает
True, если пользователь имеет каждое из указанных разрешений, где каждое perm имеет формат"<app label>.<permission codename>". Если пользователь неактивен, этот метод всегда возвращаетFalse.Если
objпередано, этот метод не будет проверять разрешения для модели, а для конкретного объекта.
-
has_module_perms(package_name) -
Возвращает
True, если пользователь имеет какие-либо разрешения в заданном пакете (метка приложения Django). Если пользователь неактивен, этот метод всегда возвращаетFalse.
-
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 -
Обязательное поле. Длина не более 80 символов. Допускаются любые символы. Пример:
'Awesome Users'.
-
permissions -
Поле «многие ко многим» к
Permission:group.permissions.set([permission_list]) group.permissions.add(permission, permission, ...) group.permissions.remove(permission, permission, ...) group.permissions.clear()
-
Валидаторы
-
class validators.ASCIIUsernameValidator -
Введено в Django 1.10.
Валидатор поля, допускающий только символы ASCII и цифры, а также
@,.,+,-, и_. По умолчанию используется дляUser.usernameв Python 2.
-
class validators.UnicodeUsernameValidator -
Введено в Django 1.10.
Валидатор поля, допускающий символы Юникода, а также
@,.,+,-, и_. По умолчанию используется дляUser.usernameв Python 3.
Сигналы входа и выхода из системы
Модуль аутентификации использует следующие сигналы, которые можно использовать для уведомления при успешном входе или выходе пользователя.
-
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 1.11:Аргумент
requestбыл добавлен. -
Справочник по модулям аутентификации
В этом разделе подробно описаны встроенные в 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()(который передает его обратно).Изменено в Django 1.11:Аргумент
requestбыл добавлен.
-
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() -
Новое в Django 1.10.
Возвращает, разрешено ли пользователю выполнять аутентификацию. Для соответствия поведению
AuthenticationForm, которыйprohibits inactive users from logging in, этот метод возвращаетFalseдля пользователей сis_active=False. Пользовательские модели, у которых нет поляis_active, разрешены.
-
-
class AllowAllUsersModelBackend -
Новое в Django 1.10.
Аналогично
ModelBackend, за исключением того, что он не отклоняет неактивных пользователей, потому чтоuser_can_authenticate()всегда возвращаетTrue.При использовании этого модуля, вероятно, потребуется настроить
AuthenticationForm, используемыйLoginView, переопределяя методconfirm_login_allowed(), так как он отклоняет неактивных пользователей.
-
class RemoteUserBackend -
Используйте этот модуль, чтобы воспользоваться аутентификацией, обработанной внешними по отношению к Django системами. Он выполняет аутентификацию, используя имена пользователей, переданные в
request.META['REMOTE_USER']. См. документацию Аутентификация по REMOTE_USER.Если вам нужен больший контроль, вы можете создать собственный модуль аутентификации, унаследованный от этого класса, и переопределить эти атрибуты или методы:
-
RemoteUserBackend.create_unknown_user -
TrueилиFalse. Определяет, создаётся ли объект пользователя, если он ещё не находится в базе данных. По умолчаниюTrue.
-
RemoteUserBackend.authenticate(request, remote_user) -
Имя пользователя, переданное как
remote_userсчитается надёжным. Этот метод просто возвращает объект пользователя с заданным именем пользователя, создавая новый объект пользователя, еслиcreate_unknown_userимеет значениеTrue.Возвращает
Noneеслиcreate_unknown_userимеет значениеFalseи объект пользователя с заданным именем пользователя не найден в базе данных.request— этоHttpRequestи может бытьNoneесли он не был предоставленauthenticate()(который передает его обратно).
-
RemoteUserBackend.clean_username(username) -
Выполняет любые операции очистки по
username(например, удаление информации LDAP DN) перед использованием для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
-
RemoteUserBackend.configure_user(user) -
Настраивает недавно созданного пользователя. Этот метод вызывается сразу после создания нового пользователя и может использоваться для выполнения пользовательских действий настройки, таких как установка групп пользователя на основе атрибутов в каталоге LDAP. Возвращает объект пользователя.
-
RemoteUserBackend.user_can_authenticate() -
Новое в Django 1.10.
Возвращает, разрешено ли пользователю пройти аутентификацию. Этот метод возвращает
Falseдля пользователей сis_active=False. Пользовательские модели пользователей, у которых нет поляis_active, разрешены.
-
class AllowAllUsersRemoteUserBackend -
Новое в Django 1.10.
То же самое, что и
RemoteUserBackend, за исключением того, что он не отклоняет неактивных пользователей, потому чтоuser_can_authenticateвсегда возвращаетTrue.
Функции для работы с данными
-
get_user(request)[source] -
Возвращает экземпляр модели пользователя, связанный с заданной
requestсессией.Проверяет, присутствует ли аутентификационный бэкэнд, сохранённый в сессии, в
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/1.11/ref/contrib/auth/