在Django的session中使用User对象的方法


Posted in Python onJuly 23, 2015

通过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)和方法。

在Django的session中使用User对象的方法

System Message: ERROR/3 (<string>, 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()
Python 相关文章推荐
解决python写的windows服务不能启动的问题
Apr 15 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
详解Python如何生成词云的方法
Jun 01 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
Django框架视图函数设计示例
Jul 29 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
python求前n个阶乘的和实例
Apr 02 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 Python
Django的session中对于用户验证的支持
Jul 23 #Python
在Django的视图(View)外使用Session的方法
Jul 23 #Python
在Python的Django框架的视图中使用Session的方法
Jul 23 #Python
详解Python的Django框架中的Cookie相关处理
Jul 22 #Python
在Django中使用Sitemap的方法讲解
Jul 22 #Python
用Python的Django框架来制作一个RSS阅读器
Jul 22 #Python
利用Python的Django框架生成PDF文件的教程
Jul 22 #Python
You might like
PHP实时显示输出
2008/10/02 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
制作特殊字的脚本
2006/06/26 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
Express的路由详解
2015/12/10 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python基础教程之while循环
2019/08/14 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
个人简历自荐信
2013/12/05 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python