1. 程式人生 > >Django中資料儲存,資料加密功能

Django中資料儲存,資料加密功能

1、cookie

1、會話技術

2、客戶端的會話技術(資料儲存在瀏覽器上

3、問題

導致原因:在web應用中,一次網路請求是從request開始,到response結束,跟以後的請求或者跟其他請求沒有關係
(導致每次請求之間的資料沒有關係(短連線、長連結))
解決:在客戶端保留資料(cookie)或者服務端保留資料(session)來建立關係

4、cookie的使用

1、存
	格式:response.set_cookie(key,value)
	例:	response.set_cookie('username',username)
    	  response.set_cookie('password',password)
	通過response通過瀏覽器要儲存key,value形式的cookie

2、取
	如過瀏覽器保留了cookie,那麼每次請求該伺服器的時候,會自動的攜帶該cookie
	格式:request.COOKIES.get(key)
	例: username = request.COOKIES.get('username')
    	 password = request.COOKIES.get('password')

3、設定過期時間
	預設情況下,關閉瀏覽器cookie就會過期,有時候我們需要設定過期時間
	格式:response.set_cookie(key,value,expirse = 值)
	expires = 0		立馬過期
    expires = None	永不過期
    expires = 值		單位是秒
    expires = timedelta(days = 值) 表示多少天后過期   (hours = 值)  表示多少小時候過期
    例:response.set_cookie('password', password, expires=timedelta(seconds=2))
4、刪除
	格式:reponse.delete_cookie(key)
	例:response.delete_cookie('password')

5、cookie的應用場景

1、儲存帳號,密碼
2、京東的購物車(不登入也可以新增到購物車)
3、保留使用者的瀏覽資訊...

2、session

1、 會話技術

2、服務端的會話技術

3、需要客戶端的支援才可以

4、使用

1、存
	格式:request.session[key] = value
	例:request.session['username']= username
    	request.session['password']=password
	注意:在django中儲存了一個session後,django會自動的生成session key,並將session key與資料自動的儲存到django_session表中,資料會自動的用base64編碼,並會自動讓瀏覽器的cookie儲存sessionid(就是session key)
	
2、取
	格式:value = request.session.get(key)
	例:username = request.session.get('username')
    	password = request.session.get('password')
    注意:在django中,會自動將cookie中的sessionid拿出來跟資料庫中的session key匹配,匹配成功後即可以獲取值
    
3、清除
	1、清除對應的cookie
	2、del request.session
	推薦的3、request.session.flush()   會清除對應的cookie及session

3、MD5—資訊摘要—加密

md5可以將任何一個二進位制的資料通過數學演算法,轉換成一個一定長度(128位)的二進位制資料
特點:1、結果是唯一的,不可能重複
	 2、不可逆
作用:1、通常用來加密密碼
	 2、通常用來驗證一個數據的完整性
使用md5處理
	建立一個md5物件
	MD5 = hashlib.md5()
	將一個二進位制資料進行md5處理,生成一個128位的二進位制資料
	4位的二進位制是一位的十六進位制
	MD5.update(password.encode('utf-8'))
	將二進位制結果轉換成32位十六進位制的結果
	password = MD5.hexdigest()

4、生成一個唯一性的字串

1、自己生成:

唯一的字串規則:時間戳 + 隨機數(很多位) + 公司的域名
mytoken = str(time.time()) + str(random.randint(100000,999999)) + 'www.baidu.com'

2、使用uuid模組

生成一個唯一的uuid
myuuid = uuid.uuid4()

5、編碼/解碼

編碼:將一個數據按照碼錶轉換成二進位制的形式  encode
解碼:將二進位制的資料轉換成可視形式的資料  decode
解碼的時候碼錶必須與編碼的碼錶一致
utf-8、gbk、base64

6、加密/解密

1、DES 對稱加密

加密的金鑰與解密的金鑰是同一個金鑰

2、RSA 非對稱加密

加密的金鑰(公鑰)與解密的金鑰(私鑰)不是同一個金鑰

3、md5/sha 資訊摘要

可以將任何一個二進位制的資料通過數學演算法,轉換成一個一定長度的二進位制資料,而該資料不可逆且唯一