在Django的視圖(View)外使用Session的方法
從內(nèi)部來(lái)看,每個(gè)session都只是一個(gè)普通的Django model(在 django.contrib.sessions.models 中定義)。每個(gè)session都由一個(gè)隨機(jī)的32字節(jié)哈希串來(lái)標(biāo)識(shí),并存儲(chǔ)于cookie中。 因?yàn)樗且粋€(gè)標(biāo)準(zhǔn)的模型,所以你可以使用Django數(shù)據(jù)庫(kù)API來(lái)存取session。
>>> from django.contrib.sessions.models import Session >>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead') >>> s.expire_date datetime.datetime(2005, 8, 20, 13, 35, 12)
你需要使用get_decoded() 來(lái)讀取實(shí)際的session數(shù)據(jù)。 這是必需的,因?yàn)樽值浯鎯?chǔ)為一種特定的編碼格式。
>>> s.session_data
'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
>>> s.get_decoded()
{'user_id': 42}
何時(shí)保存Session
缺省的情況下,Django只會(huì)在session發(fā)生變化的時(shí)候才會(huì)存入數(shù)據(jù)庫(kù),比如說(shuō),字典賦值或刪除。
# Session is modified.
request.session['foo'] = 'bar'
# Session is modified.
del request.session['foo']
# Session is modified.
request.session['foo'] = {}
# Gotcha: Session is NOT modified, because this alters
# request.session['foo'] instead of request.session.
request.session['foo']['bar'] = 'baz'
你可以設(shè)置 SESSION_SAVE_EVERY_REQUEST 為 True 來(lái)改變這一缺省行為。如果置為T(mén)rue的話,Django會(huì)在每次收到請(qǐng)求的時(shí)候保存session,即使沒(méi)發(fā)生變化。
注意,會(huì)話cookie只會(huì)在創(chuàng)建和修改的時(shí)候才會(huì)送出。 但如果 SESSION_SAVE_EVERY_REQUEST 設(shè)置為 True ,會(huì)話cookie在每次請(qǐng)求的時(shí)候都會(huì)送出。 同時(shí),每次會(huì)話cookie送出的時(shí)候,其 expires 參數(shù)都會(huì)更新。
相關(guān)文章
使用NumPy讀取MNIST數(shù)據(jù)的實(shí)現(xiàn)代碼示例
這篇文章主要介紹了使用NumPy讀取MNIST數(shù)據(jù)的實(shí)現(xiàn)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Python實(shí)現(xiàn)的統(tǒng)計(jì)文章單詞次數(shù)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的統(tǒng)計(jì)文章單詞次數(shù)功能,結(jié)合實(shí)例形式分析了Python針對(duì)字符串序列的遍歷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
Pytorch?PyG實(shí)現(xiàn)EdgePool圖分類(lèi)
這篇文章主要為大家介紹了Pytorch?PyG實(shí)現(xiàn)EdgePool圖分類(lèi)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
python執(zhí)行shell并獲取結(jié)果的詳細(xì)示例
在Python中執(zhí)行Shell命令并獲取其結(jié)果,通??梢允褂胹ubprocess模塊,這個(gè)模塊允許我們啟動(dòng)新的進(jìn)程,連接到它們的輸入/輸出/錯(cuò)誤管道,并獲取它們的返回碼,下面是一個(gè)詳細(xì)的示例,展示了如何使用subprocess.run()函數(shù)來(lái)執(zhí)行Shell命令并獲取其輸出,需要的朋友可以參考下2024-07-07
Python的Flask框架中使用Flask-SQLAlchemy管理數(shù)據(jù)庫(kù)的教程
在Python中我們可以使用SQLAlchemy框架進(jìn)行數(shù)據(jù)庫(kù)操作,那么對(duì)應(yīng)的在Flask框架中我們可以使用SQLAlchemy,下面我們就來(lái)看一下Python的Flask框架中使用Flask-SQLAlchemy管理數(shù)據(jù)庫(kù)的教程2016-06-06

