Session詳講
您的到訪使我的文章蓬蓽生輝。博主致力於一篇博文講透Session中的各類問題,不相信的鐵汁,請往下看,biubiubiu…
1.啓用Session
Django項目默認啓用Session。
可以在settings.py文件中查看,如圖所示
如需禁用session,將上圖中的session中間件註釋掉即可。註釋方法(# or Ctrl+/)
2.存儲方式
在settings.py文件中,可以設置session數據的存儲方式,可以保存在數據庫、本地緩存等。個人推薦Mysql,如果不會使用Mysql(關係型數據庫),歡迎大家動動自己的小手,關注一下博主,博主預計6月中旬陸續開更Mysql**(建庫→建表→入門→進階→刪庫→跑路)**,2333,有點跑題了,迴歸正題。
本篇博客我們就先用redis(非關係型數據庫)講解
① 數據庫
存儲在數據庫中,如下設置可以寫,也可以不寫,這是默認存儲方式。
SESSION_ENGINE='django.contrib.sessions.backends.db'
如果存儲在數據庫中,需要在INSTALLED_APPS中安裝Session應用。
數據庫中的建表如下圖所示
表結構如下
由表結構可知,操作Session包括三個數據:key,value,time
② 本地緩存
存儲在本機內存中,如果數據丟失則無法找詢,優點:比數據庫的方式讀寫更快。
SESSION_ENGINE='django.contrib.sessions.backends.cache'
③ 混合存儲
優先從本機內存中存取,如果沒有則從數據庫中存取。
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
④ Redis(非關係型數據庫)
在redis中保存session,需要引入第三方擴展,我們可以使用django-redis來解決。
1) 安裝擴展
安裝第三方庫速度緩慢或者沒有配備過鏡像源的鐵汁請戳下方,biubiubiu…
飛速下載擴展
pip install django-redis
2)配置
在settings.py文件中做如下設置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
3.注意事項
如果redis的ip地址不是本地迴環127.0.0.1,而是其他地址,訪問Django時,可能出現Redis連接錯誤,
解決方法如下:
修改redis的配置文件,添加特定ip地址。
打開redis的配置文件,進行修改。
sudo vim /etc/redis/redis.conf
完成後,重新啓動redis服務
sudo service redis-server restart
4.Session操作
通過HttpRequest對象的session屬性進行會話的讀寫操作。
1) 以鍵值對的格式來寫session。
request.session['key']=value
2)根據鍵讀取值。
request.session.get('key',None)
3)清除所有session,在存儲中刪除值部分。
request.session.clear()
4)清除session數據,在存儲中刪除session的整條數據。
request.session.flush()
5)刪除session中的指定鍵及值,在存儲中只刪除某個鍵及對應的值。
del request.session['key']
6)設置session的有效期
request.session.set_expiry(value)
- 如果value是一個整數,session將在value秒沒有運行後過期。
- 如果value爲0,那麼用戶session的Cookie將在用戶的瀏覽器關閉時過期。
- 如果value爲None,那麼session有效期將採用系統默認值,默認爲兩週,可以通過在settings.py中設置SESSION_COOKIE_AGE來設置全局默認值。
如果幫助到您或者感覺內容有可參考性,希望大家動手點贊轉發,你們的分享是我更新的唯一動力,我會將每一篇博客寫到最簡,謝謝鐵汁麼的瀏覽。
@Author:HaoXuan