程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django view (3)

編輯:Python

目錄

一、狀態保持

二、Cookoe

1.Cookie的特點

2.cookie的流程

3.設置Cookie

4 讀取Cookie

5 刪除Cookie

三、Session

1.啟動session

2.session流程

3.存儲方式

4.Session操作


一、狀態保持

  • 浏覽器請求服務器是無狀態的.
  • 無狀態:指一次用戶請求時,浏覽器、服務器無法知道之前這個用戶做過什麼,每次請求都是一次新的請求.
  • 無狀態原因:浏覽器與服務器是使用Socket套接字進行通信的,服務器將請求結果返回給浏覽器之後,會關閉當前的Socket連接,而且服務器也會在處理頁面完畢之後銷毀頁面對象.
  • 有時需要保持下來用戶浏覽的狀態,比如用戶是否登錄過,浏覽過哪些商品等
  • 實現狀態保持主要有兩種方式:
    • 在客戶端存儲信息使用Cookie
    • 在服務器端存儲信息使用Session

二、Cookoe

Cookie,有時也用其復數形式Cookies,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密).Cookie最早是網景公司的前雇員Lou Montulli在1993年3月的發明.Cookie是由服務器端生成,發送給User-Agent(一般是浏覽器),浏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器(前提是浏覽器設置為啟用cookie).Cookie名稱和值可以由服務器端開發自己定義,這樣服務器可以知道該用戶是否是合法用戶以及是否需要重新登錄等.服務器可以利用Cookies包含信息的任意性來篩選並經常性維護這些信息,以判斷在HTTP傳輸中的狀態.Cookies最典型記住用戶名.

Cookie是存儲在浏覽器中的一段純文本信息,建議不要存儲敏感信息如密碼,因為電腦上的浏覽器可能被其它人使用.

1.Cookie的特點

  • Cookie以鍵值對的格式進行信息的存儲.
  • Cookie基於域名安全,不同域名的Cookie是不能互相訪問的,如訪問itcast.cn時向浏覽器中寫了Cookie信息,使用同一浏覽器訪問baidu.com時,無法訪問到itcast.cn寫的Cookie信息.
  • 當浏覽器請求某網站時,會將浏覽器存儲的跟網站相關的所有Cookie信息提交給網站服務器.

2.cookie的流程

第一次請求過程:

  1. 浏覽器第一次請求服務器的時候,不會攜帶任何cookie信息;
  2. 服務器接收到請求之後,發現 請求中沒有任何cookie信息;
  3. 服務器設置一個cookie,這個cookie設置在響應中;
  4. After the browser receives this response,發現響應中有cookie信息,浏覽器會將cookie信息保存起來

The second and subsequent request process:

  1. When the browser second and subsequent requests will carrycookie信息
  2. 當服務器接收到請求之後,Will find the request carriedcookie信息,This will identify who made the request

3.設置Cookie

可以通過HttpResponse對象中的set_cookie方法來設置cookie.

HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
  • max_age單位為秒,默認為None .如果是臨時cookie,可將max_age設置為None.

示例:

def cookie(request):
response = HttpResponse('ok')
response.set_cookie('itcast1', 'python1') # 臨時cookie
response.set_cookie('itcast2', 'python2', max_age=3600) # 有效期一小時
return response

4 讀取Cookie

可以通過HttpResponse對象的COOKIES屬性來讀取本次請求攜帶的cookie值.request.COOKIES為字典類型.

def cookie(request):
cookie1 = request.COOKIES.get('itcast1')
print(cookie1)
return HttpResponse('OK')

5 刪除Cookie

可以通過HttpResponse對象中的delete_cookie方法來刪除.

response.delete_cookie('itcast2')

三、Session

        與cookie不同(cookie是保存在客戶端)session是保存在服務端的,session依賴於cookie,在使用session後,會在cookie中存儲一個sessionid的數據,每次請求時浏覽器都會將這個數據發給服務器,服務器在接收到sessionid後,會根據這個值找出這個請求者的Session.

1.啟動session

Django項目默認啟用Session.

可以在settings.py文件中查看,如圖所示

 如需禁用session,將上圖中的session中間件注釋掉即可.

2.session流程

第一次請求:

  1. The first request can carry some information,cookieno news in
  2. 當服務器接收到這個請求之後,進行驗證,If there is no problem with verification, it can be setsession消息
  3. 在設置session消息的同時(sessionMessages are saved on the server side),The server will set one in the response headersessionid 的cookie消息
  4. 客戶端(浏覽器)在接收到響應之後,會將cookie信息保存起來(保存 sessionid的信息)

第二次及其之後的請求:

  1. 第二次及其之後的請求都會攜帶 sessionid信息
  2. 當服務器接收到這個請求之後,會獲取到sessionid的信息,然後進行驗證,驗證成功,則可以獲取 session信息(session信息保存在服務器端)

3.存儲方式

在settings.py文件中,可以設置session數據的存儲方式,可以保存在數據庫、本地緩存等.

3.1、存儲在數據庫中:

如下設置可以寫,也可以不寫,這是默認存儲方式.

SESSION_ENGINE='django.contrib.sessions.backends.db'

 如果存儲在數據庫中,需要在項INSTALLED_APPS中安裝Session應用.

 數據庫中的表如圖所示

表結構如下

 由表結構可知,操作Session包括三個數據:鍵,值,過期時間.

3.2、存儲在本機內存中:

如果丟失則不能找回,比數據庫的方式讀寫更快.

SESSION_ENGINE='django.contrib.sessions.backends.cache'

3.3、混合存儲:

優先從本機內存中存取,如果沒有則從數據庫中存取.

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'

4.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來設置全局默認值.


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved