通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。
当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样)。 Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话。 这个系统一般被称为 auth/auth (认证与授权)系统。 这个系统的名称同时也表明了用户常见的两步处理。 我们需要
如果你已经用了admin工具(详见第6章),就会看见这些工具的大部分。如果你在admin工具中编辑过用户或组,那么实际上你已经编辑过授权系统的数据库表了。
打开认证支持
像session工具一样,认证支持也是一个Django应用,放在 django.contrib 中,所以也需要安装。 与session系统相似,它也是缺省安装的,但如果它已经被删除了,通过以下步骤也能重新安装上:
这样安装后,我们就可以在视图(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 (<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()
本文向大家介绍在Django的视图中使用form对象的方法,包括了在Django的视图中使用form对象的方法的使用技巧和注意事项,需要的朋友参考一下 在学习了关于Form类的基本知识后,你会看到我们如何把它用到视图中,取代contact()代码中不整齐的部分。 一下示例说明了我们如何用forms框架重写contact(): 看看,我们能移除这么多不整齐的代码! Django的forms框架处理H
本文向大家介绍在Django的视图(View)外使用Session的方法,包括了在Django的视图(View)外使用Session的方法的使用技巧和注意事项,需要的朋友参考一下 从内部来看,每个session都只是一个普通的Django model(在 django.contrib.sessions.models 中定义)。每个session都由一个随机的32字节哈希串来标识,并存储于cooki
我正在尝试按照Udemy上的教程建立一个电子商务。我正在讨论如何构建购物车功能(如何添加项目,请参阅总成本和数量)的章节。 但是,我在向购物车添加产品时遇到了问题。 属性错误在 /cart/add/4/ “会话存储” 对象没有属性 “会话” 请求方法: GET 请求 URL: http://127.0.0.1:8000/cart/add/4/ Django 版本: 2.1.3 异常类型: 属性错误
本文向大家介绍Django组件之cookie与session的使用方法,包括了Django组件之cookie与session的使用方法的使用技巧和注意事项,需要的朋友参考一下 一、引子 http协议是无状态的,就是它不会记录请求和响应的任何信息,比如你访问一个服务器的一个网页时,先要你登录一下,然后进入网页,但当你要进入这个服务器的另一个网页时,它照常不会知道刚才你已经登录过了,又要让你登录一下,
情况 我正在修改这个YouTube系列中的GitHub项目,这是一个演示原始应用程序如何运行的演示。 密码 model.py url.py views.py forms.py navbar.html account_admin_settings.html 错误 尝试过的解决方案 我的错误不在登录处,我不确定它在哪里-属性错误:用户对象没有属性is_admin 我以前做过迁移,做过迁移-Django
本文向大家介绍Django的session中对于用户验证的支持,包括了Django的session中对于用户验证的支持的使用技巧和注意事项,需要的朋友参考一下 用户与Authentication 通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了。 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证。 当然了,Django 也提供了工