通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。
当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样)。 Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话。 这个系统一般被称为 auth/auth (认证与授权)系统。 这个系统的名称同时也表明了用户常见的两步处理。 我们需要
验证 (认证) 用户是否是他所宣称的用户(一般通过查询数据库验证其用户名和密码)
如果你已经用了admin工具(详见第6章),就会看见这些工具的大部分。如果你在admin工具中编辑过用户或组,那么实际上你已经编辑过授权系统的数据库表了。
打开认证支持
像session工具一样,认证支持也是一个Django应用,放在 django.contrib 中,所以也需要安装。 与session系统相似,它也是缺省安装的,但如果它已经被删除了,通过以下步骤也能重新安装上:
根据本章早前的部分确认已经安装了session 框架。 需要确认用户使用cookie,这样sesson 框架才能正常使用。
这样安装后,我们就可以在视图(view)的函数中处理user了。 在视图中存取users,主要用 request.user ;这个对象表示当前已登录的用户。 如果用户还没登录,这就是一个AnonymousUser对象(细节见下)。
你可以很容易地通过 is_authenticated() 方法来判断一个用户是否已经登录了:
if request.user.is_authenticated():
# Do something for authenticated users.
else:
# Do something for anonymous users.
使用User对象
User 实例一般从 request.user ,或是其他下面即将要讨论到的方法取得,它有很多属性和方法。 AnonymousUser 对象模拟了 部分 的接口,但不是全部,在把它当成真正的user对象 使用前,你得检查一下 user.is_authenticated() 表14-3和14-4分别列出了User
对象中的属性(fields)和方法。
System Message: ERROR/3 (
Error parsing content block for the "table" directive: exactly one table expected.
.. table:: 表 User
对象方法
复制代码 代码如下:
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|方法 |描述 |
+=============================================================================================+======================================================================================================================================================+
|is_authenticated()
|对于真实的User对象,总是返回\ True
。 |
| |这是一个分辨用户是否已被鉴证的方法。 它并不意味着任何权限,也不检查用户是否仍是活动的。 它仅说明此用户已被成功鉴证。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|is_anonymous()
|对于\ AnonymousUser
对象返回\ True
(对于真实的\ User
对象返回\ False
)。 |
| |总的来说,比起这个方法,你应该倾向于使用\ is_authenticated()
方法。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|get_full_name()
|返回\ first_name
加上\ last_name
,中间插入一个空格。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|set_password(passwd)
|设定用户密码为指定字符串(自动处理成哈希串)。 实际上没有保存\ User
\对象。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|check_password(passwd) |如果指定的字符串与用户密码匹配则返回\ True
\。 比较时会使用密码哈希表。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|get_group_permissions()
|返回一个用户通过其所属组获得的权限字符串列表。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|get_all_permissions()
|返回一个用户通过其所属组以及自身权限所获得的权限字符串列表。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|has_perm(perm)
|如果用户有指定的权限,则返回\ True
,此时\ perm
的格式是\ "package.codename"
。如果用户已不活动,此方法总是返回\ False
。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|has_perms(perm_list) |如果用户拥有\ 全部 的指定权限,则返回\ True
。 如果用户是不活动的,这个方法总是返回\ False
。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|has_module_perms(app_label)
|如果用户拥有给定的\ app_label
中的任何权限,则返回\ True
。如果用户已不活动,这个方法总是返回\ False
。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|get_and_delete_messages() |返回一个用户队列中的\ Message
对象列表,并从队列中将这些消息删除。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|email_user(subj, msg)
|向用户发送一封电子邮件。 这封电子邮件是从\ DEFAULT_FROM_EMAIL
设置的地址发送的。 你还可以传送一个第三参数:\ from_email
,以覆盖电邮中的发送地址。|
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8