国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-01-04 17:59:22
字體:
供稿:網(wǎng)友

這篇文章主要介紹了在Django中管理Users和Permissions以及Groups的方法,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下

管理認(rèn)證系統(tǒng)最簡單的方法是通過管理界面。然而,當(dāng)你需要絕對的控制權(quán)的時候,有一些低層 API 需要深入專研,我們將在下面的章節(jié)中討論它們。

創(chuàng)建用戶

使用 create_user 輔助函數(shù)創(chuàng)建用戶:

 

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

在這里, user 是 User 類的一個實(shí)例,準(zhǔn)備用于向數(shù)據(jù)庫中存儲數(shù)據(jù)。(create_user()實(shí)際上沒有調(diào)用save())。 create_user() 函數(shù)并沒有在數(shù)據(jù)庫中創(chuàng)建記錄,在保存數(shù)據(jù)之前,你仍然可以繼續(xù)修改它的屬性值。

 

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

修改密碼

你可以使用 set_password() 來修改密碼:

 

 
  1. >>> user = User.objects.get(username='john'
  2. >>> user.set_password('goo goo goo joob'
  3. >>> user.save() 

除非你清楚的知道自己在做什么,否則不要直接修改 password 屬性。 其中保存的是密碼的 加入salt的hash值 ,所以不能直接編輯。

一般來說, User 對象的 password 屬性是一個字符串,格式如下:

 

 
  1. hashtype$salt$hash 

這是哈希類型,salt和哈希本身,用美元符號($)分隔。

hashtype 是 sha1 (默認(rèn))或者 md5 ,它是用來處理單向密碼哈希的算法。 Salt是一個用來加密原始密碼以創(chuàng)建哈希的隨機(jī)字符串,例如:

 

 
  1. sha1$a1976$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4 

User.set_password() 和 User.check_password() 函數(shù)在后臺處理和檢查這些值。

salt化得哈希值

一次 哈希 是一次單向的加密過程,你能容易地計(jì)算出一個給定值的哈希碼,但是幾乎不可能從一個哈希碼解出它的原值。

如果我們以普通文本存儲密碼,任何能進(jìn)入數(shù)據(jù)庫的人都能輕易的獲取每個人的密碼。 使用哈希方式來存儲密碼相應(yīng)的減少了數(shù)據(jù)庫泄露密碼的可能。

然而,攻擊者仍然可以使用 暴力破解 使用上百萬個密碼與存儲的值對比來獲取數(shù)據(jù)庫密碼。 這需要花一些時間,但是智能電腦驚人的速度超出了你的想象。

更糟糕的是我們可以公開地得到 rainbow tables (一種暴力密碼破解表)或預(yù)備有上百萬哈希密碼值的數(shù)據(jù)庫。 使用rainbow tables可以在幾秒之內(nèi)就能搞定最復(fù)雜的一個密碼。

在存儲的hash值的基礎(chǔ)上,加入 salt 值(一個隨機(jī)值),增加了密碼的強(qiáng)度,使得破解更加困難。 因?yàn)槊總€密碼的salt值都不相同,這也限制了rainbow table的使用,使得攻擊者只能使用最原始的暴力破解方法。

加入salt值得hash并不是絕對安全的存儲密碼的方法,然而卻是安全和方便之間很好的折衷。

處理注冊

我們可以使用這些底層工具來創(chuàng)建允許用戶注冊的視圖。 最近每個開發(fā)人員都希望實(shí)現(xiàn)各自不同的注冊方法,所以Django把寫注冊視圖的工作留給了你。 幸運(yùn)的是,這很容易。

作為這個事情的最簡化處理, 我們可以提供一個小視圖, 提示一些必須的用戶信息并創(chuàng)建這些用戶。 Django為此提供了可用的內(nèi)置表單, 下面這個例子就使用了這個表單:

 

 
  1. from django import forms 
  2. from django.contrib.auth.forms import UserCreationForm 
  3. from django.http import HttpResponseRedirect 
  4. from django.shortcuts import render_to_response 
  5.  
  6. def register(request): 
  7. if request.method == 'POST'
  8. form = UserCreationForm(request.POST) 
  9. if form.is_valid(): 
  10. new_user = form.save() 
  11. return HttpResponseRedirect("/books/"
  12. else
  13. form = UserCreationForm() 
  14. return render_to_response("registration/register.html", { 
  15. 'form': form, 
  16. }) 

這個表單需要一個叫 registration/register.html 的模板。這個模板可能是這樣的:

 

  1. {% extends "base.html" %} 
  2.  
  3. {% block title %}Create an account{% endblock %} 
  4.  
  5. {% block content %} 
  6. <h1>Create an account</h1> 
  7.  
  8. <form action="" method="post"
  9. {{ form.as_p }} 
  10. <input type="submit" value="Create the account"
  11. </form> 
  12. {% endblock %} 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平舆县| 大埔区| 吕梁市| 土默特右旗| 颍上县| 大新县| 新兴县| 霞浦县| 西盟| 鲁甸县| 应用必备| 离岛区| 济南市| 海林市| 久治县| 太原市| 务川| 循化| 阿拉善右旗| 依安县| 宣汉县| 滦平县| 丹阳市| 哈密市| 普定县| 昔阳县| 婺源县| 疏附县| 都昌县| 淳安县| 五寨县| 时尚| 漳浦县| 南岸区| 思南县| 东乡族自治县| 宣恩县| 神池县| 巨野县| 潮安县| 凤庆县|