django.contrib.auth

本文件为Django认证系统的组成部分提供了API参考资料。有关这些组件的用法或如何自定义身份验证和授权的详细信息,请参阅 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 .

groups

多对多关系 Group

user_permissions

多对多关系 Permission

is_staff

布尔型。允许此用户访问管理站点。

is_active

布尔型。将此用户帐户标记为活动。我们建议您将此标志设置为 False 而不是删除帐户。这样,如果您的应用程序有任何指向用户的外键,外键就不会中断。

这不一定控制用户是否可以登录。不需要验证后端来检查 is_active 标记,但默认后端 (ModelBackendRemoteUserBackend 做。你可以使用 AllowAllUsersModelBackendAllowAllUsersRemoteUserBackend 如果要允许非活动用户登录。在这种情况下,您还需要自定义 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 . 这是一种区分 UserAnonymousUser 对象。一般来说,您应该更喜欢使用 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_passwordNone ,密码将设置为不可用的密码,就像 set_unusable_password() 使用。

check_password(raw_password)
acheck_password(raw_password)

Asynchronous versionacheck_password()

返回 True 如果给定的原始字符串是用户的正确密码。(这将在进行比较时考虑密码散列。)

Changed in Django 5.0:

acheck_password() 添加了方法。

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 app标签)中有任何权限。如果用户处于非活动状态,此方法将始终返回 False . 对于活动的超级用户,此方法将始终返回 True .

email_user(subject, message, from_email=None, **kwargs)

向用户发送电子邮件。如果 from_emailNone ,Django使用 DEFAULT_FROM_EMAIL . 任何 **kwargs 传递给基础 send_mail() 调用。

管理者方法

class models.UserManager

这个 User 模型有一个自定义管理器,该管理器具有以下帮助器方法(除了 BaseUserManager ):

create_user(username, email=None, password=None, **extra_fields)

创建、保存并返回 User .

这个 usernamepassword 按给定设置。的域部分 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_staffis_superuserTrue .

with_perm(perm, is_active=True, include_superusers=True, backend=None, obj=None)

返回具有给定权限的用户 perm 要么在 "<app label>.<permission codename>" 格式或 Permission 实例。如果没有用户具有 perm 找到了。

如果 is_activeTrue (默认),只返回活动用户,或者如果 False ,只返回非活动用户。使用 None 返回所有用户,而不考虑活动状态。

如果 include_superusersTrue (默认),结果将包括超级用户。

如果 backend 传入并在中定义 AUTHENTICATION_BACKENDS ,则此方法将使用它。否则,它将使用 backend 在里面 AUTHENTICATION_BACKENDS ,如果只有一个,则引发异常。

AnonymousUser 对象

class models.AnonymousUser

django.contrib.auth.models.AnonymousUser 是实现 django.contrib.auth.models.User 界面,有这些区别:

在实践中,您可能不需要使用 AnonymousUser 对象,但它们由Web请求使用,如下一节所述。

Permission 模型

class models.Permission

字段

Permission 对象具有以下字段:

class models.Permission
name

必修的。255个字符或更少。例子: 'Can vote' .

content_type

必修的。参考 django_content_type 数据库表,其中包含每个已安装模型的记录。

codename

必修的。不超过100个字符。例子: 'can_vote' .

方法

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 sectionUser 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_字段指定的字段(请参见 Customizing Users and authentication

它还处理为定义的默认权限模型 UserPermissionsMixin .

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_anonymousis_activeFalse .

get_group_permissions(user_obj, obj=None)

返回一组权限字符串 user_obj 从所属组的权限中获取。如果返回空集 is_anonymousis_activeFalse .

get_all_permissions(user_obj, obj=None)

返回一组权限字符串 user_obj 包含用户权限和组权限。如果返回空集 is_anonymousis_activeFalse .

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>" 或A Permission 实例。如果没有用户具有 perm 找到了。

如果 is_activeTrue (默认),只返回活动用户,或者如果 False ,只返回非活动用户。使用 None 返回所有用户,而不考虑活动状态。

如果 include_superusersTrue (默认),结果将包括超级用户。

class AllowAllUsersModelBackend

等同于 ModelBackend 但它不会拒绝不活动的用户,因为 user_can_authenticate() 总是回报 True .

使用此后端时,您可能希望自定义 AuthenticationForm 用于 LoginView 通过覆盖 confirm_login_allowed() 方法,因为它拒绝不活动的用户。

class RemoteUserBackend

使用此后端可以利用Django处理的外部身份验证。它使用传入的用户名进行身份验证 request.META['REMOTE_USER'] . 见 Authenticating against REMOTE_USER 文档。

如果您需要更多的控制,可以创建继承自此类的自己的身份验证后端,并重写这些属性或方法:

create_unknown_user

TrueFalse . 确定是否在数据库中创建用户对象(如果尚未创建)默认为 True .

authenticate(request, remote_user)

用户名作为 remote_user 被认为是可信的。此方法返回具有给定用户名的user对象,如果 create_unknown_userTrue .

返回 None 如果 create_unknown_userFalse 和A User 在数据库中找不到具有给定用户名的对象。

request 是一个 HttpRequest 可能是 None 如果没有提供给 authenticate() (将其传递到后端)。

clean_username(username)

username (例如,剥离LDAP DN信息)在使用它获取或创建用户对象之前。返回已清除的用户名。

configure_user(request, user, created=True)

在每次身份验证尝试时配置用户。此方法在获取或创建要进行身份验证的用户后立即调用,并可用于执行自定义设置操作,如基于LDAP目录中的属性设置用户组。返回用户对象。

设置可以在创建用户时执行一次 (createdTrue )或在现有用户上 (createdFalse )作为在远程和本地系统之间同步属性的一种方式。

request 是一个 HttpRequest 可能是 None 如果没有提供给 authenticate() (将其传递到后端)。

user_can_authenticate()

返回是否允许用户进行身份验证。此方法返回 False 为用户提供 is_active=False . 自定义用户模型没有 is_active 字段是允许的。

class AllowAllUsersRemoteUserBackend

等同于 RemoteUserBackend 但它不会拒绝不活动的用户,因为 user_can_authenticate 总是回报 True .

效用函数

get_user(request)[源代码]
aget_user(request)[源代码]

Asynchronous versionaget_user()

返回与给定的 request 的会议。

它检查存储在会话中的身份验证后端是否存在于 AUTHENTICATION_BACKENDS 。如果是,它使用后端的 get_user() 方法检索用户模型实例,然后通过调用用户模型的 get_session_auth_hash() 方法。如果验证失败,并且 SECRET_KEY_FALLBACKS ,它使用以下命令验证会话: get_session_auth_fallback_hash()

返回的实例 AnonymousUser 如果会话中存储的身份验证后端不再位于 AUTHENTICATION_BACKENDS ,如果后端系统没有返回用户 get_user() 方法,或者如果会话身份验证哈希未验证。

Changed in Django 5.0:

aget_user() 添加了功能。