django.contrib.auth
¶
Этот документ содержит справочный материал по API для компонентов системы аутентификации Django. Для получения более подробной информации об использовании этих компонентов или о том, как настроить аутентификацию и авторизацию, смотрите authentication topic guide.
User
модель¶
-
class
models.
User
¶
Поля¶
-
class
models.
User
Объекты
User
имеют следующие поля:-
username
¶ Требуется. Не более 150 символов. Имена пользователей могут содержать буквенно-цифровые,
_
,@
,+
,.
и-
символы.Длина
max_length
должна быть достаточной для многих случаев использования. Если вам нужна большая длина, используйте custom user model. Если вы используете MySQL с кодировкойutf8mb4
(рекомендуется для правильной поддержки Unicode), укажите не болееmax_length=191
, поскольку по умолчанию MySQL может создавать уникальные индексы только с 191 символом в этом случае.
-
first_name
¶ Необязательно (
blank=True
). Не более 150 символов.
-
last_name
¶ Необязательно (
blank=True
). Не более 150 символов.
-
email
¶ Необязательно (
blank=True
). Адрес электронной почты.
-
password
¶ Требуется. Хеш пароля и метаданные о нем. (Django не хранит необработанный пароль.) Необработанные пароли могут быть произвольно длинными и содержать любые символы. См. password documentation.
-
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
()¶ Возвращает имя пользователя для данного пользователя. Поскольку модель
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_user_permissions
(obj=None)¶ Возвращает набор строк разрешений, которые есть непосредственно у пользователя.
Если передано
obj
, возвращает только разрешения пользователя для данного конкретного объекта.
-
get_group_permissions
(obj=None)¶ Возвращает набор строк разрешений, которыми обладает пользователь через свои группы.
Если передано
obj
, возвращает только групповые разрешения для данного конкретного объекта.
-
get_all_permissions
(obj=None)¶ Возвращает набор строк разрешений, которые имеет данный пользователь, как через групповые, так и через пользовательские разрешения.
Если передано
obj
, возвращает разрешения только для этого конкретного объекта.
-
has_perm
(perm, obj=None)¶ Возвращает
True
, если пользователь имеет указанное разрешение, где perm имеет формат"<app label>.<permission codename>"
. (см. документацию по permissions). Если пользователь неактивен, этот метод всегда будет возвращатьFalse
. Для активного суперпользователя этот метод всегда будет возвращатьTrue
.Если передано
obj
, этот метод будет проверять разрешение не для модели, а для данного конкретного объекта.
-
has_perms
(perm_list, obj=None)¶ Возвращает
True
, если пользователь имеет каждое из указанных разрешений, где каждое разрешение имеет формат"<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
передаются методуUser
__init__
, чтобы позволить установить произвольные поля на custom user model.Пример использования см. в Creating users.
-
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
либо в формате"<app label>.<permission codename>"
, либо в виде экземпляраPermission
. Возвращает пустой набор запросов, если пользователей, имеющих разрешениеperm
не найдено.Если
is_active
равноTrue
(по умолчанию), возвращаются только активные пользователи, или еслиFalse
, возвращаются только неактивные пользователи. ИспользуйтеNone
для возврата всех пользователей независимо от активного состояния.Если
include_superusers
равноTrue
(по умолчанию), результат будет включать суперпользователей.Если передано
backend
и оно определено вAUTHENTICATION_BACKENDS
, то этот метод будет использовать его. В противном случае он будет использоватьbackend
в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
.
- id всегда
In practice, you probably won’t need to use
AnonymousUser
objects on your own, but
they’re used by web requests, as explained in the next section.
Permission
модель¶
-
class
models.
Permission
¶
Поля¶
Объекты Permission
имеют следующие поля:
Методы¶
Объекты Permission
имеют стандартные методы доступа к данным, как и любые другие Django model.
Group
модель¶
-
class
models.
Group
¶
Поля¶
Объекты Group
имеют следующие поля:
-
class
models.
Group
-
name
¶ Требуется. Не более 150 символов. Допускаются любые символы. Пример:
'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
¶ Валидатор полей, допускающий только буквы и цифры ASCII, в дополнение к
@
,.
,+
,-
и_
.
-
class
validators.
UnicodeUsernameValidator
¶ Валидатор поля, позволяющий использовать символы Unicode, в дополнение к
@
,.
,+
,-
и_
. Валидатор по умолчанию дляUser.username
.
Сигналы входа и выхода из системы¶
Фреймворк auth использует следующие signals, которые могут быть использованы для уведомления, когда пользователь входит или выходит из системы.
-
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. Информацию о том, как их использовать и как писать свои собственные бэкенды аутентификации, смотрите в Other authentication sources section User authentication guide.
Доступные бэкенды аутентификации¶
В 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 (см. Customizing Users and authentication).
Он также обрабатывает модель разрешений по умолчанию, определенную для
User
иPermissionsMixin
.has_perm()
,get_all_permissions()
,get_user_permissions()
иget_group_permissions()
позволяют передавать объект в качестве параметра для объектно-специфических разрешений, но данный бэкенд не реализует их, кроме возврата пустого набора разрешений, еслиobj is not None
.with_perm()
также позволяет передавать объект в качестве параметра, но в отличие от других методов возвращает пустой кверисет, если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
, разрешены.
-
with_perm
(perm, is_active=True, include_superusers=True, obj=None)¶ Возвращает всех активных пользователей, имеющих разрешение
perm
либо в виде"<app label>.<permission codename>"
, либо в виде экземпляраPermission
. Возвращает пустой набор запросов, если пользователей, имеющих разрешениеperm
, не найдено.Если
is_active
равноTrue
(по умолчанию), возвращаются только активные пользователи, или еслиFalse
, возвращаются только неактивные пользователи. ИспользуйтеNone
для возврата всех пользователей независимо от активного состояния.Если
include_superusers
равноTrue
(по умолчанию), результат будет включать суперпользователей.
-
-
class
AllowAllUsersModelBackend
¶ То же самое, что и
ModelBackend
, за исключением того, что он не отклоняет неактивных пользователей, потому чтоuser_can_authenticate()
всегда возвращаетTrue
.При использовании этого бэкенда вы, вероятно, захотите настроить
AuthenticationForm
, используемыйLoginView
, переопределив методconfirm_login_allowed()
, поскольку он отклоняет неактивных пользователей.
-
class
RemoteUserBackend
¶ Используйте этот бэкенд, чтобы воспользоваться преимуществами аутентификации, управляемой извне. Он аутентифицирует, используя имена пользователей, переданные в
request.META['REMOTE_USER']
. См. документацию Authenticating against REMOTE_USER.Если вам нужно больше контроля, вы можете создать свой собственный бэкэнд аутентификации, который наследуется от этого класса, и переопределить эти атрибуты или методы:
-
create_unknown_user
¶ True
илиFalse
. Определяет, создается ли объект пользователя, если его еще нет в базе данных По умолчаниюTrue
.
-
authenticate
(request, remote_user)¶ Имя пользователя, переданное как
remote_user
, считается доверенным. Этот метод возвращает объект пользователя с заданным именем пользователя, создавая новый объект пользователя, еслиcreate_unknown_user
являетсяTrue
.Возвращает
None
, еслиcreate_unknown_user
естьFalse
иUser
объект с заданным именем пользователя не найден в базе данных.request
являетсяHttpRequest
и может бытьNone
, если он не был предоставленauthenticate()
(который передает его бэкенду).
-
clean_username
(username)¶ Выполняет любую очистку
username
(например, удаление информации LDAP DN) перед использованием его для получения или создания объекта пользователя. Возвращает очищенное имя пользователя.
-
configure_user
(request, user, created=True)¶ Configures the user on each authentication attempt. This method is called immediately after fetching or creating the user being authenticated, 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.
Настройка может быть выполнена либо один раз при создании пользователя (
created
-True
), либо для существующих пользователей (created
-False
) как способ синхронизации атрибутов между удаленной и локальной системами.request
являетсяHttpRequest
и может бытьNone
, если он не был предоставленauthenticate()
(который передает его бэкенду).Changed in Django Development version:Был добавлен аргумент
created
.
-
user_can_authenticate
()¶ Возвращает, разрешена ли пользователю аутентификация. Этот метод возвращает
False
для пользователей сis_active=False
. Пользовательские модели пользователей, не имеющие поляis_active
, разрешены.
-
-
class
AllowAllUsersRemoteUserBackend
¶ То же самое, что и
RemoteUserBackend
, за исключением того, что он не отклоняет неактивных пользователей, потому чтоuser_can_authenticate
всегда возвращаетTrue
.
Функции полезности¶
-
get_user
(request)[исходный код]¶ Возвращает экземпляр модели пользователя, связанный с сеансом данного
request
.Он проверяет, присутствует ли в
AUTHENTICATION_BACKENDS
бэкенд аутентификации, сохраненный в сессии. Если да, то он использует метод бэкендаget_user()
для получения экземпляра модели пользователя, а затем проверяет сессию, вызывая метод модели пользователяget_session_auth_hash()
.Возвращает экземпляр
AnonymousUser
, если бэкенд аутентификации, хранящийся в сессии, больше не находится вAUTHENTICATION_BACKENDS
, если пользователь не возвращен методомget_user()
бэкенда, или если хэш аутентификации сессии не подтвержден.