最短時間攻透最完善的Python框架——Django⑩

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應用。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4ij1Eoa5-1590751644083)(file:///D:/Django%E6%A1%86%E6%9E%B6%E8%AF%BE%E4%BB%B6/images/session_app.png)]

數據庫中的建表如下圖所示

在這裏插入圖片描述

表結構如下

在這裏插入圖片描述

由表結構可知,操作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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章