django自帶乙個加密的方法signer,對資料進行乙個加密
一般這種方式用於賬號密碼郵箱找回,或者token設定
class這是django文件中的原始碼 ,可以看到是繼承自signer類的,其中sign函式是對輸入的資料加上當前時間戳進行乙個加密timestampsigner(signer):
deftimestamp(self):
return
baseconv.base62.encode(int(time.time()))
defsign(self, value):
value = '
%s%s%s
' %(value, self.sep, self.timestamp())
return
super().sign(value)
def unsign(self, value, max_age=none):
"""retrieve original value and check it wasn't signed more
than max_age seconds ago.
"""result =super().unsign(value)
value, timestamp = result.rsplit(self.sep, 1)
timestamp =baseconv.base62.decode(timestamp)
if max_age is
notnone:
ifisinstance(max_age, datetime.timedelta):
max_age =max_age.total_seconds()
#check timestamp is not older than max_age
age = time.time() -timestamp
if age >max_age:
raise
signatureexpired(
'signature age %s > %s seconds
' %(age, max_age))
return value
unsign則是驗證加密資料是否過時,得到傳入加密資料的時間戳,對函式中max_age時間轉換為時間格式對比,如果當前時間減去加密資料的時間大於設定的規定時間,則丟擲異常,不然返回正確的值
但是有個大問題,就是 加密資料會顯示出來 比如加密資料 會顯示為' :fszfdfyhyrtcfvdrsvg15r1x32b' 這種明顯不行
後來在網上查詢 發現sign類中含有序列化進行乙個加密 並且可以新增對時間的控制
其實就是將上面的 timestampsigner 類的時間戳加密弄過來了 返回一串加密字元 其中預設使用當時時間戳進行時間認證 不像flask在進行加密時可以確認過期時間 相反
可以儲存到cookies中,進下乙個頁面需要驗證使用這個驗證(ps在這cookies卡了好久,我還以為咋cookeis沒傳過去,一直是空的 原來需要httpresponse設定...)
解密sign 值
同樣也是 timestampsigner 的時間戳解密 原始碼如下
key和sigin加密一樣預設不設定,先以簡單為主
其中有乙個引數max_age(用來對比時間) unsign解密原始碼
比如你是在1點10分進行乙個加密,加密sign數值中含有1點10分的時間,使用unsign解密 輸入max_age=60 數值為秒 不設定則為永久存在
解密過程中對比 將時間格式化 當前解密時的時間 減去
加密的時間 得到相減的時間 如果大於設定過期時間 丟擲異常 不然返回解密值
所以我的**是
加密
from datetime import解密獲取sign值成功')
req.set_cookie(
'sign
',value)
return req
def結果get_sign(request):
value = request.cookies.get('
sign')
(value)
s = '
沒有獲取到sign'if
value:
try:
s = signing.loads(value,max_age=20) # 設定過期時間
(s,datetime.now())
(type(s)) # 加密時什麼格式 返回什麼格式
except
:
print('
sign過期
',datetime.now())
s = '
sign過期
獲取不過期的sign 並得到結果 傳入dict得到dict
對比設定解密時間過期 結果
設定的20秒過期 設定sign時間為20:42:23 獲取sign的時間為20:43:38 哪怕能獲取到sign值,也會解密錯誤
Django 從零開始
方法1 pip install django 1.6.5 測試是否安裝成功 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包括如下步驟 tar xzvf django tar.gz...
Django 從零開始
方法1 pip install django 1.6.5 測試是否成功安裝 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包含例如以下步驟 tar xzvf django tar....
時間管理 從零開始GTD GTD原則
收集把任何你需要跟蹤 記住 或者要做的事情全部記錄到 收集箱 中 乙個收件箱,電子郵箱,磁帶,筆記本,pda等等。把你腦中所有東西都清理出來,放入你的收集裝置中,準備進行下一步的處理。每天抽幾十分鐘收集一下腦中的資訊,記錄到你的收集裝置中。處理 將你收集到的任何資訊進行處理。每個星期至少處理清空一次...