在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装饰器验证配置文件示例
Feb 24 Python
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
Python异常处理操作实例详解
Aug 28 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
Python如何实现机器人聊天
Sep 10 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 23 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 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 Mssql操作简单封装支持存储过程
2009/12/11 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
vue实现表格数据的增删改查
2017/07/10 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Python中的高级数据结构详解
2015/03/27 Python
在Django中创建第一个静态视图
2015/07/15 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
销售部主管岗位职责
2013/12/18 职场文书
总经理秘书的岗位职责
2013/12/27 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
运动会稿件100字
2014/02/21 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书