最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:42:06
文档

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

在Django的session中使用User对象的方法:通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。 当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样)。 Djang
推荐度:
导读在Django的session中使用User对象的方法:通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。 当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样)。 Djang
 通过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)和方法。


    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()
    
    

    文档

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

    在Django的session中使用User对象的方法:通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。 当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样)。 Djang
    推荐度:
    标签: 用户 用户的 对象
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top