淺析Django中關(guān)于session的使用
一、Session的概念
cookie是在瀏覽器端保存鍵值對(duì)數(shù)據(jù),而session是在服務(wù)器端保存鍵值對(duì)數(shù)據(jù)
session 的使用依賴(lài) cookie:在使用Session后,會(huì)在Cookie中存儲(chǔ)一個(gè)sessionid的數(shù)據(jù),每次請(qǐng)求時(shí)瀏覽器都會(huì)將這個(gè)數(shù)據(jù)發(fā)給服務(wù)器,服務(wù)器在接收到sessionid后,會(huì)根據(jù)這個(gè)值找出這個(gè)請(qǐng)求者的Session。
二、Django中session的使用
session鍵值對(duì)數(shù)據(jù)保存
session數(shù)據(jù)默認(rèn)保存在django項(xiàng)目的一張數(shù)據(jù)庫(kù)表中(表名為:django_session),保存格式如下:
三、數(shù)據(jù)操作:
以鍵值對(duì)的格式寫(xiě)session
request.session['鍵']=值
根據(jù)鍵讀取值
request.session.get('鍵',默認(rèn)值) # 或者 request.session['鍵']
清除所有session,在存儲(chǔ)中刪除值的部分
request.session.clear()
清除session數(shù)據(jù),在存儲(chǔ)中刪除session的整條數(shù)據(jù)
request.session.flush()
刪除session中的指定鍵及值,在存儲(chǔ)中只刪除某個(gè)鍵及對(duì)應(yīng)的值
del request.session['鍵']
設(shè)置session數(shù)據(jù)有效時(shí)間; 如果不設(shè)置,默認(rèn)過(guò)期時(shí)間為兩周
request.session.set_expiry(value)
- 如果value是一個(gè)整數(shù),則 session數(shù)據(jù) 將在value秒沒(méi)有活動(dòng)后過(guò)期。
- 如果value為None,那么會(huì)話(huà)永不過(guò)期。
- 如果value為0,那么用戶(hù)會(huì)話(huà)的Cookie將在用戶(hù)的瀏覽器關(guān)閉時(shí)過(guò)期。
四、以下是使用例子:
# 發(fā)短信接口 def sms_send(request): # http://localhost:8000/duanxin/duanxin/sms_send/?phone=18434288349 # 1 獲取手機(jī)號(hào) phone = request.GET.get('phone') # 2 生成6位驗(yàn)證碼 code = aliyunsms.get_code(6, False) # 3 緩存到Redis #cache.set(phone,code,60) #60s有效期 #print('判斷緩存中是否有:',cache.has_key(phone)) #print('獲取Redis驗(yàn)證碼:',cache.get(phone)) #暫時(shí)用session處理 request.session['phone'] = code request.session.set_expiry(300) #設(shè)置5分鐘后過(guò)期 print('判斷緩存中是否有:', request.session.get('phone')) print('獲取session驗(yàn)證碼:',request.session.get('phone')) # 4 發(fā)短信 result = aliyunsms.send_sms(phone, code) return HttpResponse(result) # 短信驗(yàn)證碼校驗(yàn) def sms_check(request): # /duanxin/sms_check/?phone=xxx&code=xxx # 1. 電話(huà)和手動(dòng)輸入的驗(yàn)證碼 phone = request.GET.get('phone') code = request.GET.get('code') # 2. 獲取redis中保存的code #print('緩存中是否包含:',cache.has_key(phone)) #print('取值:',cache.get(phone)) #cache_code = cache.get(phone) #獲取session里的code print('取值:', request.session.get('phone')) cache_code = request.session.get('phone') # 3. 判斷 if code == cache_code: return HttpResponse(json.dumps({'result':'OK'})) else: return HttpResponse(json.dumps({'result':'False'}))
總結(jié)
以上所述是小編給大家介紹的Django下關(guān)于session的使用,希望對(duì)大家有所幫助!
相關(guān)文章
Python實(shí)現(xiàn)PDF頁(yè)面的刪除與添加功能
在處理PDF文檔的過(guò)程中,我們時(shí)常會(huì)需要對(duì)PDF文檔中的頁(yè)面進(jìn)行編輯操作的情況,如插入和刪除頁(yè)面,通過(guò)添加和刪除PDF頁(yè)面,我們可以增加內(nèi)容或?qū)Σ恍枰膬?nèi)容進(jìn)行刪除,本文將介紹如何使用Python代碼實(shí)現(xiàn)在PDF文檔中添加和刪除頁(yè)面2024-04-04Python實(shí)現(xiàn)將列表拆分為大小為N的塊
這篇文章主要為大家整理了一些常見(jiàn)的Python實(shí)現(xiàn)將列表拆分為大小為N的塊的方法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的小伙伴可以了解下2023-09-09python Pandas時(shí)序數(shù)據(jù)處理
這篇文章主要介紹了python Pandas時(shí)序數(shù)據(jù)處理,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06Python中報(bào)錯(cuò) “TypeError: ‘list‘ object is&n
這篇文章主要介紹了Python中報(bào)錯(cuò) “TypeError: ‘list‘ object is not callable”問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09python實(shí)現(xiàn)的多線(xiàn)程端口掃描功能示例
這篇文章主要介紹了python實(shí)現(xiàn)的多線(xiàn)程端口掃描功能,結(jié)合實(shí)例形式分析了Python基于socket的端口掃描具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-01-01