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

來源:互聯網
上載者:User
管理認證系統最簡單的方法是通過管理介面。然而,當你需要絕對的控制權的時候,有一些低層 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 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 %} 

Create an account

{% endblock %}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.