在Django的session中使用User对象的方法
admin
2023-07-31 02:29:34
0

通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。

当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样)。 Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话。 这个系统一般被称为 auth/auth (认证与授权)系统。 这个系统的名称同时也表明了用户常见的两步处理。 我们需要

  •     验证 (认证) 用户是否是他所宣称的用户(一般通过查询数据库验证其用户名和密码)
  •     验证用户是否拥有执行某种操作的 授权 (通常会通过检查一个权限表来确认)
  • 根据这些需求,Django 认证/授权 系统会包含以下的部分:
  •     用户 : 在网站注册的人
  •     权限 : 用于标识用户是否可以执行某种操作的二进制(yes/no)标志
  •     组 :一种可以将标记和权限应用于多个用户的常用方法
  •     Messages : 向用户显示队列式的系统消息的常用方法

如果你已经用了admin工具(详见第6章),就会看见这些工具的大部分。如果你在admin工具中编辑过用户或组,那么实际上你已经编辑过授权系统的数据库表了。
打开认证支持

像session工具一样,认证支持也是一个Django应用,放在 django.contrib 中,所以也需要安装。 与session系统相似,它也是缺省安装的,但如果它已经被删除了,通过以下步骤也能重新安装上:

  •     根据本章早前的部分确认已经安装了session 框架。 需要确认用户使用cookie,这样sesson 框架才能正常使用。
  •     将 \’django.contrib.auth\’ 放在你的 INSTALLED_APPS 设置中,然后运行 manage.py syncdb以创建对应的数据库表。
  •     确认 SessionMiddleware 后面的 MIDDLEWARE_CLASSES 设置中包含 \’django.contrib.auth.middleware.AuthenticationMiddleware\’ SessionMiddleware。

这样安装后,我们就可以在视图(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)和方法。

2015723100423413.jpg (713×385)

System Message: ERROR/3 (, line 735)

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“ ,以覆盖电邮中的发送地址。|
   +———————————————————————————————+——————————————————————————————————————————————————+

最后,“ User“ 对象有两个many-to-many属性。 “ groups“ 和“ permissions“ 。正如其他的many-to-many属性使用的方法一样,“ User“ 对象可以获得它们相关的对象:

# Set a user\'s groups:
myuser.groups = group_list

# Add a user to some groups:
myuser.groups.add(group1, group2,...)

# Remove a user from some groups:
myuser.groups.remove(group1, group2,...)

# Remove a user from all groups:
myuser.groups.clear()

# Permissions work the same way
myuser.permissions = permission_list
myuser.permissions.add(permission1, permission2, ...)
myuser.permissions.remove(permission1, permission2, ...)
myuser.permissions.clear()

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...