日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django(part37)--session

發布時間:2023/12/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django(part37)--session 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考,有錯必究


文章目錄

    • cookies和session
      • session
        • Django啟用Session
        • session的基本操作
        • session 示例



cookies和session


session


session的意思就是會話,session可以在服務器上開辟一段空間,保留瀏覽器和服務器交互時的重要數據(重要數據一定是存儲在服務器上),每個客戶端都可以在服務器端有一個獨立的session

http協議是無狀態的,即每次請求都是一次新的請求,服務器不會記得之前通信的狀態,客戶端與服務器端的一次通信,就是一次新的會話,實現狀態保持的方式就是在客戶端或服務器端存儲與會話有關的數據;

我們推薦使用sesison方式,將所有數據存儲在服務器端在客戶端cookie中存儲session_id

需要注意的是,不同的請求者之間不會共享數據,請求者與響應是一一對應的關系。


Django啟用Session


我們打開settings.py文件,在INSTALLED_APPS列表中添加(如果已經存在就不再添加):

INSTALLED_APPS = [# 啟用 sessions 應用'django.contrib.sessions', ]

在MIDDLEWARE_CLASSES列表中添加(如果已經存在就不再添加):

MIDDLEWARE = [# 啟用 Session 中間層'django.contrib.sessions.middleware.SessionMiddleware', ]

session的基本操作


session對象是一個類似于字典的SessionStore對象, 可以用類似于字典的方式進行操作,session只可以存儲能夠序列化的數據,如字典,列表等。


  • 保存 session 的值到服務器
request.session['KEY'] = VALUE #VALUE為Python中的基礎數據類型
  • 獲取session的值
VALUE = request.session['KEY'] #或 VALUE = request.session.get('KEY', 缺省值)
  • 刪除session的值
del request.session['KEY']
  • 在 settings.py中有關 session 的設置
SESSION_COOKIE_AGE #作用:指定session_id在cookies中的保存時長 #例如:SESSION_COOKIE_AGE = 60*30 SESSION_EXPIRE_AT_BROWSER_CLOSE = True #若為True, 則只要瀏覽器關閉時, session就失效
  • 注意事項

當使用session時需要遷移數據庫,否則會出現錯誤,這是因為session看起來是一個字典,但實際上,session需要把它的內容序列化到數據庫中。

python manage.py makemigrations python manage.py migrate

session 示例


我們在主視圖模塊views.py中加入兩個視圖函數:

def test_session(request):# 為session 添加mykey 對應的值request.session['mykey'] = ['山羊', '黑山羊']return HttpResponse('設置成功')def show_session(request):# 取出sesssion中,mykey對應的數據value = request.session.get('mykey', 'mykey沒有對應的值')s = str(value)return HttpResponse(s)

在主urls.py文件中,加入倆路由:

from django.urls import re_path from django.contrib import admin from django.conf.urls import include from . import viewsurlpatterns = [re_path(r'^admin/', admin.site.urls),re_path(r'^show_session/', views.show_session),re_path(r'^test_session/', views.test_session), ]

向http://127.0.0.1:8000/test_session/發起請求:

再向http://127.0.0.1:8000/show_session/發起請求:

當我們關閉瀏覽器,再訪問http://127.0.0.1:8000/show_session/,發現我們的session依然存在,這是因為session是保存在服務器端,而不是瀏覽器端。

我們打開瀏覽器的開發者工具DevTool,進入Application下的Cookies,可以看到列表中有一個sessionid:

當我們使用自定義視圖函數test_session創建一個session時,瀏覽器會自動創建一個不重復的sessionid,客戶端會拿著這個sessionid在服務器端找到對應的session。

現在,我們刪除這個sessionid,再刷新一下http://127.0.0.1:8000/show_session/,就可以發現找不到session了:

這是因為,我們刪除sessionid之后,服務器端就不知道我們要的是哪一個session了。


現在,我們向http://127.0.0.1:8000/test_session/發起請求,再創建一個session,并向http://127.0.0.1:8000/show_session/發起請求:

修改視圖函數test_session,準備刪除服務器端的session:

def test_session(request):del request.session['mykey']return HttpResponse('設置成功')

向http://127.0.0.1:8000/test_session/發起請求,將服務器端的session刪除,并查看http://127.0.0.1:8000/show_session/:

嗯,session已經被刪除了!

但需要注意的是,雖然我們的session在服務器端被刪除了,但是我們的瀏覽器依然保存著sessionid:

這有點類似于,我們的銀行賬戶被凍結了,但是我們依然保留著該卡號的銀行卡。

總結

以上是生活随笔為你收集整理的Django(part37)--session的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。