Django專案中的session儲存
阿新 • • 發佈:2018-11-22
Session
1 啟用Session
Django專案預設啟用Session。
可以在settings.py檔案中檢視,如圖所示
如需禁用session,將上圖中的session中介軟體註釋掉即可。
2 儲存方式
在settings.py檔案中,可以設定session資料的儲存方式,可以儲存在資料庫、本地快取等。
2.1 資料庫
儲存在資料庫中,如下設定可以寫,也可以不寫,這是預設儲存方式。
SESSION_ENGINE='django.contrib.sessions.backends.db'
如果儲存在資料庫中,需要在項INSTALLED_APPS中安裝Session應用。
資料庫中的表如圖所示
表結構如下
由表結構可知,操作Session包括三個資料:鍵,值,過期時間。
2.2 本地快取
儲存在本機記憶體中,如果丟失則不能找回,比資料庫的方式讀寫更快。
SESSION_ENGINE='django.contrib.sessions.backends.cache'
2.3 混合儲存
優先從本機記憶體中存取,如果沒有則從資料庫中存取。
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
2.4 Redis
在redis中儲存session,需要引入第三方擴充套件,我們可以使用django-redis來解決。
1) 安裝擴充套件
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"
注意
如果redis的ip地址不是本地(專案上線)迴環127.0.0.1,而是其他地址,訪問Django時,可能出現Redis連線錯誤,如下:
解決方法:
修改redis的配置檔案,新增特定ip地址。
開啟redis的配置檔案
sudo vim /etc/redis/redis.conf
在如下配置項進行修改(如要新增10.211.55.5地址)
3 Session操作
通過HttpRequest物件的session屬性進行會話的讀寫操作。
1) 以鍵值對的格式寫session。
request.session['鍵']=值
2)根據鍵讀取值。
request.session.get('鍵',預設值)
3)清除所有session,在儲存中刪除值部分。
request.session.clear()
4)清除session資料,在儲存中刪除session的整條資料。
request.session.flush()
5)刪除session中的指定鍵及值,在儲存中只刪除某個鍵及對應的值。
del request.session['鍵']
6)設定session的有效期
request.session.set_expiry(value)
- 如果value是一個整數,session將在value秒沒有活動後過期。
- 如果value為0,那麼使用者session的Cookie將在使用者的瀏覽器關閉時過期。
- 如果value為None,那麼session有效期將採用系統預設值,預設為兩週,可以通過在settings.py中設定SESSION_COOKIE_AGE來設定全域性預設值。