django.contrib.auth
¶本文件为Django认证系统的组成部分提供了API参考资料。有关这些组件的用法或如何自定义身份验证和授权的详细信息,请参阅 authentication topic guide .
User
模型¶User
对象具有以下字段:
必修的。不超过150个字符。用户名可以包含字母数字, _
, @
, +
, .
和 -
字符。
这个 max_length
对于许多用例来说应该是足够的。如果您需要更长的长度,请使用 custom user model . 如果将mysql与 utf8mb4
编码(建议用于正确的Unicode支持),最多指定 max_length=191
因为在这种情况下,MySQL只能创建191个字符的唯一索引。
可选的 (blank=True
)不超过150个字符。
可选的 (blank=True
)不超过150个字符。
可选的 (blank=True
)电子邮件地址。
必修的。密码的散列和元数据。(Django不存储原始密码。)原始密码可以任意长,可以包含任何字符。见 password documentation .
多对多关系 Permission
布尔型。允许此用户访问管理站点。
布尔型。将此用户帐户标记为活动。我们建议您将此标志设置为 False
而不是删除帐户。这样,如果您的应用程序有任何指向用户的外键,外键就不会中断。
这不一定控制用户是否可以登录。不需要验证后端来检查 is_active
标记,但默认后端 (ModelBackend
) RemoteUserBackend
做。你可以使用 AllowAllUsersModelBackend
或 AllowAllUsersRemoteUserBackend
如果要允许非活动用户登录。在这种情况下,您还需要自定义 AuthenticationForm
用于 LoginView
因为它拒绝不活动的用户。注意权限检查方法,例如 has_perm()
django admin中的身份验证全部返回 False
对于非活动用户。
布尔型。将此用户视为拥有所有权限,而不特别为其分配任何权限。
用户上次登录的日期时间。
创建帐户的日期/时间。
只读属性 True
(而不是 AnonymousUser.is_authenticated
总是这样 False
)这是一种判断用户是否已通过身份验证的方法。这并不意味着任何权限,也不检查用户是否处于活动状态或是否具有有效会话。即使正常情况下您将在 request.user
以确定它是否由 AuthenticationMiddleware
(表示当前登录的用户),您应该知道该属性是 True
对于任何 User
实例。
只读属性 False
. 这是一种区分 User
和 AnonymousUser
对象。一般来说,您应该更喜欢使用 is_authenticated
到这个属性。
返回用户的用户名。自从 User
模型可以换出,您应该使用这个方法,而不是直接引用username属性。
返回 first_name
加上 last_name
,中间有一个空格。
返回 first_name
.
将用户密码设置为给定的原始字符串,注意密码散列。不保存 User
对象。
当 raw_password
是 None
,密码将设置为不可用的密码,就像 set_unusable_password()
使用。
Asynchronous version : acheck_password()
返回 True
如果给定的原始字符串是用户的正确密码。(这将在进行比较时考虑密码散列。)
acheck_password()
添加了方法。
将用户标记为未设置密码。这与密码的空字符串不同。 check_password()
因为这个用户永远不会回来 True
. 不保存 User
对象。
如果应用程序针对现有外部源(如LDAP目录)进行身份验证,则可能需要这样做。
返回 False
如果 set_unusable_password()
已为此用户调用。
返回用户直接拥有的一组权限字符串。
如果 obj
则只返回此特定对象的用户权限。
返回用户通过其组拥有的一组权限字符串。
如果 obj
传入,仅返回此特定对象的组权限。
返回用户通过组和用户权限拥有的一组权限字符串。
如果 obj
传入,仅返回此特定对象的权限。
返回 True
如果用户具有指定的权限,则perm的格式为 "<app label>.<permission codename>"
. (参见文档 permissions )如果用户处于非活动状态,此方法将始终返回 False
. 对于活动的超级用户,此方法将始终返回 True
.
如果 obj
如果传入,此方法将不会检查模型的权限,而是检查此特定对象的权限。
返回 True
如果用户具有每个指定的权限,则每个权限的格式为 "<app label>.<permission codename>"
. 如果用户处于非活动状态,此方法将始终返回 False
. 对于活动的超级用户,此方法将始终返回 True
.
如果 obj
如果传入,此方法将不会检查模型的权限,而是检查特定对象的权限。
返回 True
如果用户在给定包(django app标签)中有任何权限。如果用户处于非活动状态,此方法将始终返回 False
. 对于活动的超级用户,此方法将始终返回 True
.
向用户发送电子邮件。如果 from_email
是 None
,Django使用 DEFAULT_FROM_EMAIL
. 任何 **kwargs
传递给基础 send_mail()
调用。
这个 User
模型有一个自定义管理器,该管理器具有以下帮助器方法(除了 BaseUserManager
):
创建、保存并返回 User
.
这个 username
和 password
按给定设置。的域部分 email
将自动转换为小写,并返回 User
对象将具有 is_active
设置为 True
.
如果没有提供密码, set_unusable_password()
将被调用。
这个 extra_fields
关键字参数传递给 User
的 __init__
方法以允许在 custom user model .
见 Creating users 例如用法。
等同于 create_user()
但集合 is_staff
和 is_superuser
到 True
.
返回具有给定权限的用户 perm
要么在 "<app label>.<permission codename>"
格式或 Permission
实例。如果没有用户具有 perm
找到了。
如果 is_active
是 True
(默认),只返回活动用户,或者如果 False
,只返回非活动用户。使用 None
返回所有用户,而不考虑活动状态。
如果 include_superusers
是 True
(默认),结果将包括超级用户。
如果 backend
传入并在中定义 AUTHENTICATION_BACKENDS
,则此方法将使用它。否则,它将使用 backend
在里面 AUTHENTICATION_BACKENDS
,如果只有一个,则引发异常。
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
.
在实践中,您可能不需要使用 AnonymousUser
对象,但它们由Web请求使用,如下一节所述。
Permission
模型¶Permission
对象具有以下字段:
Permission
对象与其他对象一样具有标准的数据访问方法 Django model .
Group
模型¶Group
对象具有以下字段:
必修的。不超过150个字符。允许使用任何字符。例子: 'Awesome Users'
.
多对多字段到 Permission
::
group.permissions.set([permission_list])
group.permissions.add(permission, permission, ...)
group.permissions.remove(permission, permission, ...)
group.permissions.clear()
除此之外,只允许使用ASCII字母和数字的字段验证器 @
, .
, +
, -
和 _
.
除了允许使用Unicode字符外,还允许使用 @
, .
, +
, -
和 _
. 的默认验证器 User.username
.
auth框架使用以下内容 signals 它可用于用户登录或注销时的通知。
当用户成功登录时发送。
随此信号发送的参数:
sender
刚登录的用户的类。
request
HttpRequest
实例。
user
刚登录的用户实例。
在调用注销方法时发送。
sender
如上所述:刚注销或 None
如果用户未通过身份验证。
request
HttpRequest
实例。
user
刚注销的用户实例或 None
如果用户未通过身份验证。
用户登录失败时发送
sender
用于身份验证的模块的名称。
credentials
包含传递给的用户凭据的关键字参数字典 authenticate()
或者您自己的自定义身份验证后端。与一组“敏感”模式(包括密码)匹配的凭证不会作为信号的一部分以明文形式发送。
request
这个 HttpRequest
对象,如果提供给 authenticate()
.
本节详细介绍了Django附带的身份验证后端。有关如何使用它们以及如何编写自己的身份验证后端的信息,请参阅 Other authentication sources section 的 User authentication guide .
以下后端可用于 django.contrib.auth.backends
:
为所有必需方法提供默认实现的基类。默认情况下,它将拒绝任何用户,并且不提供任何权限。
返回一个空集。
返回一个空集。
使用 get_user_permissions()
和 get_group_permissions()
要获取权限字符串集 user_obj
有。
使用 get_all_permissions()
检查是否 user_obj
具有权限字符串 perm
.
这是Django使用的默认身份验证后端。它使用由用户标识符和密码组成的凭证进行身份验证。对于django的默认用户模型,用户标识符是用户名,对于自定义用户模型,它是由username_字段指定的字段(请参见 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
.
尝试进行身份验证 username
具有 password
通过调用 User.check_password
. 如果没有 username
提供了,它尝试从 kwargs
使用密钥 CustomUser.USERNAME_FIELD
. 返回经过身份验证的用户或 None
.
request
是一个 HttpRequest
可能是 None
如果没有提供给 authenticate()
(将其传递到后端)。
返回一组权限字符串 user_obj
拥有自己的用户权限。如果返回空集 is_anonymous
或 is_active
是 False
.
返回一组权限字符串 user_obj
从所属组的权限中获取。如果返回空集 is_anonymous
或 is_active
是 False
.
返回一组权限字符串 user_obj
包含用户权限和组权限。如果返回空集 is_anonymous
或 is_active
是 False
.
使用 get_all_permissions()
检查是否 user_obj
具有权限字符串 perm
. 退换商品 False
如果用户不是 is_active
.
返回是否 user_obj
对应用程序有任何权限 app_label
.
返回是否允许用户进行身份验证。以匹配 AuthenticationForm
哪一个 prohibits inactive users from logging in
,此方法返回 False
为用户提供 is_active=False
. 自定义用户模型没有 is_active
字段是允许的。
返回拥有此权限的所有活动用户 perm
或者以 "<app label>.<permission codename>"
或A Permission
实例。如果没有用户具有 perm
找到了。
如果 is_active
是 True
(默认),只返回活动用户,或者如果 False
,只返回非活动用户。使用 None
返回所有用户,而不考虑活动状态。
如果 include_superusers
是 True
(默认),结果将包括超级用户。
等同于 ModelBackend
但它不会拒绝不活动的用户,因为 user_can_authenticate()
总是回报 True
.
使用此后端时,您可能希望自定义 AuthenticationForm
用于 LoginView
通过覆盖 confirm_login_allowed()
方法,因为它拒绝不活动的用户。
使用此后端可以利用Django处理的外部身份验证。它使用传入的用户名进行身份验证 request.META['REMOTE_USER']
. 见 Authenticating against REMOTE_USER 文档。
如果您需要更多的控制,可以创建继承自此类的自己的身份验证后端,并重写这些属性或方法:
True
或 False
. 确定是否在数据库中创建用户对象(如果尚未创建)默认为 True
.
用户名作为 remote_user
被认为是可信的。此方法返回具有给定用户名的user对象,如果 create_unknown_user
是 True
.
返回 None
如果 create_unknown_user
是 False
和A User
在数据库中找不到具有给定用户名的对象。
request
是一个 HttpRequest
可能是 None
如果没有提供给 authenticate()
(将其传递到后端)。
在 username
(例如,剥离LDAP DN信息)在使用它获取或创建用户对象之前。返回已清除的用户名。
在每次身份验证尝试时配置用户。此方法在获取或创建要进行身份验证的用户后立即调用,并可用于执行自定义设置操作,如基于LDAP目录中的属性设置用户组。返回用户对象。
设置可以在创建用户时执行一次 (created
是 True
)或在现有用户上 (created
是 False
)作为在远程和本地系统之间同步属性的一种方式。
request
是一个 HttpRequest
可能是 None
如果没有提供给 authenticate()
(将其传递到后端)。
返回是否允许用户进行身份验证。此方法返回 False
为用户提供 is_active=False
. 自定义用户模型没有 is_active
字段是允许的。
等同于 RemoteUserBackend
但它不会拒绝不活动的用户,因为 user_can_authenticate
总是回报 True
.
Asynchronous version : aget_user()
返回与给定的 request
的会议。
它检查存储在会话中的身份验证后端是否存在于 AUTHENTICATION_BACKENDS
。如果是,它使用后端的 get_user()
方法检索用户模型实例,然后通过调用用户模型的 get_session_auth_hash()
方法。如果验证失败,并且 SECRET_KEY_FALLBACKS
,它使用以下命令验证会话: get_session_auth_fallback_hash()
。
返回的实例 AnonymousUser
如果会话中存储的身份验证后端不再位于 AUTHENTICATION_BACKENDS
,如果后端系统没有返回用户 get_user()
方法,或者如果会话身份验证哈希未验证。
aget_user()
添加了功能。
12月 18, 2023