django處理cookies和session

cookie和session是個啥,鬼畜都知道,因此不說鳥。直接開記錄在djano框架下面如何操做cookie和session。python

存取cookiesweb

讀取cookies很簡單,由於讀取cookies可使用HttpResquest,每個HttpResquest對象都有一個COOKIES對象,能夠用它讀取任何瀏覽器發送給視圖的cookies。數據庫

由於每一個視圖函數的第一個參數都是request,其實它就是一個HtppResquest對象,因此直接使用request.COOKIES讀取cookies就好。django

寫COOKIES就使用HttpResquest對象的set_cookie()方法,set_cookie有一些可選參數來指定一些特殊操做。瀏覽器

session操做cookie

開啓session(他是經過一箇中間件和一個模型來實現的)。session

1.編輯MIDDLEWARE_CLASSES,確保裏面已經包含了django.contrib.sessions.middleware.SessionMiddleware。框架

2.確認INSTALLED_APPS,確保裏面已經含有一個叫django.contrib.sessions的鬼畜。函數

其實這兩項,通常默認就有了,前提是你的項目是用python manage.py startproject mysite來建立的。測試

視圖中使用session

SessionMiddleware被激活之後,每一個視圖函數的第一個參數request(也就是HttpResquest對象)都有一個session屬性,它和cookie同樣,也是個字典型的對象,能夠像使用普通字典那樣使用。

在操做session時候的一些忌諱:

1.使用正常的的字符串來訪問字典,而不是整數,對象,或者其餘什麼很討厭的東西。

2.key值最好不要使用下劃線來命名,由於有些是保留的,可是通常也用不到。

3.不要用一個新對象來替代request.session。

4.不要向request.session中存屬性。

測試COOKIE

固然鳥,有些賤人就是喜歡關閉cookie,因此做爲蛋疼的web開發者們,想在人家機器上存儲一個cookie都得先test一下。

可使用request.session.set_test_cookie()來測試,讓後在其餘的視圖中使用request.session.test_cookie_worked(),兩次測試是不在同一個視圖函數中的,爲何要這樣,跟cookie的工做原理有關。

delete_test_cookie能夠用來刪除用於測試而設置的cookie。

在視圖以外使用session

咱們可使用django的數據庫API來存取session,咱們使用get_decoded來讀取實際的session數據。

有效期

若是SESSION_EXPIRE_AT_BROWSER_CLOSE設置爲false,那麼cookie在瀏覽器中保存週期是SESSION_COOKIE_AGE秒。若是設置爲true,那麼關閉瀏覽器時候,就會失效。

相關文章
相關標籤/搜索