加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在Django中管理Users和Permissions以及Groups的方法

发布时间:2020-12-16 22:02:34 所属栏目:Python 来源:网络整理
导读:管理认证系统最简单的方法是通过管理界面。然而,当你需要绝对的控制权的时候,有一些低层 API 需要深入专研,我们将在下面的章节中讨论它们。 创建用户 使用 create_user 辅助函数创建用户: from django.contrib.auth.models import User user = User.objec

管理认证系统最简单的方法是通过管理界面。然而,当你需要绝对的控制权的时候,有一些低层 API 需要深入专研,我们将在下面的章节中讨论它们。
创建用户

使用 create_user 辅助函数创建用户:

>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user(username='john',...         email='jlennon@beatles.com',...         password='glass onion')

在这里, user 是 User 类的一个实例,准备用于向数据库中存储数据。(create_user()实际上没有调用save())。 create_user() 函数并没有在数据库中创建记录,在保存数据之前,你仍然可以继续修改它的属性值。

>>> user.is_staff = True
>>> user.save()

修改密码

你可以使用 set_password() 来修改密码:

>>> user = User.objects.get(username='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$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4

User.set_password() 和 User.check_password() 函数在后台处理和检查这些值。

salt化得哈希值

一次 哈希 是一次单向的加密过程,你能容易地计算出一个给定值的哈希码,但是几乎不可能从一个哈希码解出它的原值。

如果我们以普通文本存储密码,任何能进入数据库的人都能轻易的获取每个人的密码。 使用哈希方式来存储密码相应的减少了数据库泄露密码的可能。

然而,攻击者仍然可以使用 暴力破解 使用上百万个密码与存储的值对比来获取数据库密码。 这需要花一些时间,但是智能电脑惊人的速度超出了你的想象。

更糟糕的是我们可以公开地得到 rainbow tables (一种暴力密码破解表)或预备有上百万哈希密码值的数据库。 使用rainbow tables可以在几秒之内就能搞定最复杂的一个密码。

在存储的hash值的基础上,加入 salt 值(一个随机值),增加了密码的强度,使得破解更加困难。 因为每个密码的salt值都不相同,这也限制了rainbow table的使用,使得攻击者只能使用最原始的暴力破解方法。

加入salt值得hash并不是绝对安全的存储密码的方法,然而却是安全和方便之间很好的折衷。
处理注册

我们可以使用这些底层工具来创建允许用户注册的视图。 最近每个开发人员都希望实现各自不同的注册方法,所以Django把写注册视图的工作留给了你。 幸运的是,这很容易。

作为这个事情的最简化处理,我们可以提供一个小视图,提示一些必须的用户信息并创建这些用户。 Django为此提供了可用的内置表单,下面这个例子就使用了这个表单:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response

def 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 %}


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读