ySJ
|
2.0/chapter14/#627 |
2010-04-22 13:17:12
|
这需要花一些时间,但是智能电脑惊人的速度超出了你的想象。
|
|
ySJ
|
2.0/chapter14/#626 |
2010-04-22 13:16:57
|
然而,攻击者仍然可以使用 <emphasis>暴力破解</emphasis> 使用上百万个密码与存储的值对比来获取数据库密码。
|
|
ySJ
|
2.0/chapter14/#619 |
2010-04-22 13:11:59
|
salt化得哈希值
|
|
ySJ
|
2.0/chapter14/#614 |
2010-04-22 13:02:29
|
Salt是一个用来加密原始密码以创建哈希的随机字符串,例如:
|
|
ySJ
|
2.0/chapter14/#613 |
2010-04-22 12:55:24
|
<literal>hashtype</literal> 是 <literal>sha1</literal> (默认)或者 <literal>md5</literal> ,它是用来处理单向密码哈希的算法。
|
|
ySJ
|
2.0/chapter14/#596 |
2010-04-22 12:48:09
|
在这里, <literal>user</literal> 是 <literal>User</literal> 类的一个实例,准备用于向数据库中存储数据。(<literal>create_user()</literal>实际上没有调用<literal>save()</literal>)。
|
|
ySJ
|
2.0/chapter14/#587 |
2010-04-22 11:21:44
|
第六章讨论了怎样使用Django的管理界面来编辑用户和控制他们的权限和可访问性,并且大多数时间你使用这个界面就可以了。
|
|
ySJ
|
2.0/chapter14/#570 |
2010-04-22 11:20:28
|
<literal>permission_required()</literal> 装饰器。
|
|
ySJ
|
2.0/chapter14/#563 |
2010-04-22 11:13:38
|
一个可调用的方法,当存在 <literal>User</literal> 对象并当此用户允许查看该页面时返回 <literal>True</literal> 。
|
|
ySJ
|
2.0/chapter14/#559 |
2010-04-22 11:10:11
|
并且Django有一个称为 <literal>user_passes_test</literal> 的简洁方式。它接受参数然后为你指定的情况生成装饰器。
|
|
ySJ
|
2.0/chapter14/#556 |
2010-04-22 11:08:11
|
例如,下面视图确认用户登录并是否有 <literal>polls.can_vote</literal>权限:
|
|
ySJ
|
2.0/chapter14/#553 |
2010-04-22 11:07:04
|
限制访问可以基于某种权限,某些检查或者为login视图提供不同的位置,这些实现方式大致相同。
|
|
ySJ
|
2.0/chapter14/#548 |
2010-04-22 11:01:49
|
如果用户已经登录, 正常地执行视图函数。
|
|
ySJ
|
2.0/chapter14/#546 |
2010-04-22 11:01:30
|
/accounts/login/?next=/polls/3/ 。
|
|
ySJ
|
2.0/chapter14/#545 |
2010-04-22 11:01:04
|
如果用户没有登录, 重定向到 <literal>/accounts/login/</literal> , 把当前绝对URL作为 <literal>next</literal> 在查询字符串中传递过去, 例如:
|
|
ySJ
|
2.0/chapter14/#527 |
2010-04-22 10:56:39
|
默认情况下它渲染 <literal>registration/logged_out.html</literal> 模板(这个视图一般包含你已经成功退出的信息)。
|
|
ySJ
|
2.0/chapter14/#524 |
2010-04-22 10:55:47
|
也可以把值以<literal>GET</literal>参数的形式发送给视图函数,它会以变量<literal>next</literal>的形式保存在上下文中,这样你就可以把它用在隐藏域上了。
|
|
ySJ
|
2.0/chapter14/#523 |
2010-04-22 10:53:06
|
你可以提供一个保存登录后重定向URL的<literal>next</literal>隐藏域来重载它的行为。
|
|
ySJ
|
2.0/chapter14/#522 |
2010-04-22 10:50:57
|
如果用户登录成功,缺省会重定向到 <literal>/accounts/profile</literal> 。
|
|
ySJ
|
2.0/chapter14/#504 |
2010-04-22 10:49:25
|
注销一个用户,在你的视图中使用 <literal>django.contrib.auth.logout()</literal> 。
|
|
ySJ
|
2.0/chapter14/#495 |
2010-04-22 10:35:22
|
如果密码不合法,<literal>authenticate()</literal>返回<literal>None</literal>。
|
|
ySJ
|
2.0/chapter14/#494 |
2010-04-22 10:34:37
|
认证给出的用户名和密码,使用 <literal>authenticate()</literal> 函数。它接受两个参数,用户名 username 和 密码 password ,并在密码对给出的用户名合法的情况下返回一个 User 对象。
|
|
ySJ
|
2.0/chapter14/#492 |
2010-04-22 10:33:40
|
Django提供两个函数来执行<literal>django.contrib.auth</literal>中的动作 : <literal>authenticate()</literal>
和<literal>login()</literal>。
|
|
ySJ
|
2.0/chapter14/#491 |
2010-04-22 10:32:47
|
Django 提供内置的视图(view)函数用于处理登录和退出 (以及其他奇技淫巧),但在开始前,我们来看看如何手工登录和退出。
|
|
ySJ
|
2.0/chapter14/#486 |
2010-04-22 10:31:52
|
<literal> groups</literal> 和<literal> permissions</literal> 。正如其他的many-to-many属性使用的方法一样,<literal> User</literal> 对象可以获得它们相关的对象:
|
|
ySJ
|
2.0/chapter14/#475 |
2010-04-22 10:30:52
|
get_and_delete_messages()
|
|
ySJ
|
2.0/chapter14/#466 |
2010-04-22 10:30:11
|
has_perms(perm_list)
|
|
ySJ
|
2.0/chapter14/#451 |
2010-04-22 10:29:04
|
如果指定的字符串与用户密码匹配则返回<literal>True</literal>。
|
|
ySJ
|
2.0/chapter14/#449 |
2010-04-22 10:27:48
|
check_password(passwd)
|
|
ySJ
|
2.0/chapter14/#447 |
2010-04-22 10:27:00
|
实际上没有保存<literal>User</literal>对象。
|
|
ySJ
|
2.0/chapter14/#446 |
2010-04-22 10:25:51
|
设定用户密码为指定字符串(自动处理成哈希串)。
|
|
ySJ
|
2.0/chapter14/#446 |
2010-04-22 10:25:41
|
设定用户密码为指定字符串(自动处理生哈希串)。
|
|
ySJ
|
2.0/chapter14/#438 |
2010-04-22 10:23:52
|
总的来说,比起这个方法,你应该倾向于使用<literal> is_authenticated()</literal> 方法。
|
|
ySJ
|
2.0/chapter14/#426 |
2010-04-22 10:20:20
|
描述
|
|
ySJ
|
2.0/chapter14/#408 |
2010-04-22 10:19:36
|
标识用户是否拥有所有权限,无需显式地权限分配定义。
|
|
ySJ
|
2.0/chapter14/#402 |
2010-04-22 10:18:31
|
设置该账户是否可以登录。
|
|
ySJ
|
2.0/chapter14/#403 |
2010-04-22 10:17:24
|
把该标志位置为<literal>False</literal>而不是直接删除账户。
|
|
ySJ
|
2.0/chapter14/#402 |
2010-04-22 10:16:04
|
用户是否拥有所有权限,而无需任何显式的权限分配定义。
|
|
ySJ
|
2.0/chapter14/#397 |
2010-04-22 10:15:22
|
用户是否拥有网站的管理权限。
|
|
ySJ
|
2.0/chapter14/#396 |
2010-04-22 10:15:09
|
布尔值。
|
|
ySJ
|
2.0/chapter14/#391 |
2010-04-22 10:14:54
|
密码的哈希值(Django不储存原始密码)。
|
|
ySJ
|
2.0/chapter14/#386 |
2010-04-22 10:13:15
|
邮件地址。
|
|
ySJ
|
2.0/chapter14/#385 |
2010-04-22 10:12:51
|
可选。
|
|
ySJ
|
2.0/chapter14/#381 |
2010-04-22 10:12:41
|
可选; 少于等于30字符。
|
|
ySJ
|
2.0/chapter14/#377 |
2010-04-22 10:12:28
|
可选; 少于等于30字符。
|
|
ySJ
|
2.0/chapter14/#370 |
2010-04-22 10:09:35
|
username
|
|
ySJ
|
2.0/chapter14/#353 |
2010-04-22 10:07:44
|
你可以很容易地通过 <literal>is_authenticated()</literal> 方法来判断一个用户是否已经登录了:
|
|
ySJ
|
2.0/chapter14/#351 |
2010-04-22 10:06:57
|
如果用户还没登录,这就是一个<literal>AnonymousUser</literal>对象(细节见下)。
|
|
ySJ
|
2.0/chapter14/#349 |
2010-04-22 10:04:43
|
这样安装后,我们就可以在视图(view)的函数中处理user了。
|
|
ySJ
|
2.0/chapter14/#347 |
2010-04-22 10:03:20
|
SessionMiddleware。
|
|