当前位置:K88软件开发文章中心网站服务器框架django → 文章内容

Django 会话、用户和注册

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-25 14:19:25

ame='john')>>> user.set_password('goo goo goo joob')>>> user.save()除非你清楚的知道自己在做什么,否则不要直接修改 password 属性。 其中保存的是密码的 加入salt的hash值,所以不能直接编辑。一般来说, User 对象的 password 属性是一个字符串,格式如下:hashtype$salt$hash这是哈希类型,salt和哈希本身,用美元符号($)分隔。hashtype 是 sha1 (默认)或者 md5 ,它是用来处理单向密码哈希的算法。 Salt是一个用来加密原始密码以创建哈希的随机字符串,例如:sha1$a1976$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4User.set_password() 和 User.check_password() 函数在后台处理和检查这些值。salt化得哈希值一次 哈希 是一次单向的加密过程,你能容易地计算出一个给定值的哈希码,但是几乎不可能从一个哈希码解出它的原值。如果我们以普通文本存储密码,任何能进入数据库的人都能轻易的获取每个人的密码。 使用哈希方式来存储密码相应的减少了数据库泄露密码的可能。然而,攻击者仍然可以使用 暴力破解 使用上百万个密码与存储的值对比来获取数据库密码。 这需要花一些时间,但是智能电脑惊人的速度超出了你的想象。更糟糕的是我们可以公开地得到 rainbow tables (一种暴力密码破解表)或预备有上百万哈希密码值的数据库。 使用rainbow tables可以在几秒之内就能搞定最复杂的一个密码。在存储的hash值的基础上,加入 salt 值(一个随机值),增加了密码的强度,使得破解更加困难。 因为每个密码的salt值都不相同,这也限制了rainbow table的使用,使得攻击者只能使用最原始的暴力破解方法。加入salt值得hash并不是绝对安全的存储密码的方法,然而却是安全和方便之间很好的折衷。处理注册我们可以使用这些底层工具来创建允许用户注册的视图。 最近每个开发人员都希望实现各自不同的注册方法,所以Django把写注册视图的工作留给了你。 幸运的是,这很容易。作为这个事情的最简化处理, 我们可以提供一个小视图, 提示一些必须的用户信息并创建这些用户。 Django为此提供了可用的内置表单, 下面这个例子就使用了这个表单:from django import formsfrom django.contrib.auth.forms import UserCreationFormfrom django.http import HttpResponseRedirectfrom django.shortcuts import render_to_responsedef register(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): new_user = form.save() return HttpResponseRedirect("/books/") else: form = UserCreationForm() return render_to_response("registration/register.html", { 'form': form, })这个表单需要一个叫 registration/register.html 的模板。这个模板可能是这样的:{% extends "base.html" %}{% block title %}Create an account{% endblock %}{% block content %} <h1>Create an account</h1> <form action="" method="post"> {{ form.as_p }} <input type="submit" value="Create the account"> </form>{% endblock %}在模板中使用认证数据当前登入的用户以及他(她)的权限可以通过 RequestContext 在模板的context中使用(详见第9章)。注意从技术上来说,只有当你使用了 RequestContext这些变量才可用。 _并且_TEMPLATE_CONTEXT_PROCESSORS 设置包含了 “django.core.context_processors.auth” (默认情况就是如此)时,这些变量才能在模板context中使用。 TEMPLATE_CONTEXT_PROCESSORS 设置包含了 "django.core.context_processors.auth" (默认情况就是如此)时,这些变量才能在模板context中使用。当使用 RequestContext 时, 当前用户 (是一个 User 实例或一个 AnonymousUser 实例) 存储在模板变量{{ user }} 中:{% if user.is_authenticated %} <p>Welcome, {{ user.username }}. Thanks for logging in.</p>{% else %} <p>Welcome, new user. Please log in.</p>{% endif %}这些用户的权限信息存储在 {{ perms }} 模板变量中。你有两种方式来使用 perms 对象。 你可以使用类似于 {{ perms.polls }} 的形式来检查,对于某个特定的应用,一个用户是否具有 任意 权限;你也可以使用 {{ perms.polls.can_vote }} 这样的形式,来检查一个用户是否拥有特定的权限。这样你就可以在模板中的 {% if %} 语句中检查权限:{% if perms.polls %} <p>You have permission to do something in the polls app.</p> {% if perms.polls.can_vote %} <p>You can vote!</p> {% endif %}{% else %} <p>You don't have permission to do anything in the polls app.</p>{% endif %}权限、组和消息在认证框架中还有其他的一些功能。 我们会在接下来的几个部分中进一步地了解它们。权限权限可以很方便地标识用户和用户组可以执行的操作。 它们被Django的admin管理站点所使用,你也可以在你自己的代码中使用它们。Django的admin站点如下使用权限:只有设置了 add 权限的用户才能使用添加表单,添加对象的视图。只有设置了 change 权限的用户才能使用变更列表,变更表格,变更对象的视图。只有设置了 delete 权限的用户才能删除一个对象。权限是根据每一个类型的对象而设置的,并不具体到对象的特定实例。 例如,我们可以允许Mary改变新故事,但是目前还不允许设置Mary只能改变自己创建的新故事,或者根据给定的状态,出版日期或者ID号来选择权限。会自动为每一个Django模型创建三个基本权限:增加、改变和删除。 当你运行manage.py syncdb命令时,这些权限被添加到auth_permission数据库表中。权限以 "._" 的形式出现。就跟用户一样,权限也就是Django模型中的 django.contrib.auth.models 。因此如果你愿意,你也可以通过Django的数据库API直接操作权限。组组提供了一种通用的方式来让你按照一定的权限规则和其他标签将用户分类。 一个用户可以隶属于任何数量的组。在一个组中的用户自动获得了赋予该组的权限。 例如, Site editors 组拥有 can_edit_home_page 权限,任何在该组中的用户都拥有这个权限。组也可以通过给定一些用户特殊的标记,来扩展功能。 例如,你创建了一个 'Special users' 组,并且允许组中的用户访问站点的一些VIP部分,或者发送VIP的邮件消息。和用户管理一样,admin接口是管理组的最简单的方法。 然而,组也就

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页


Django 会话、用户和注册