在Django中,cookie和session都是使用鍵值對的形式來進行存盤和操作的,可以使用response_obj.set_cookie()、response_obj.delete_cookie()和request.COOKIES等方式來設定、洗掉和獲取cookie資訊,使用request.session中的方法來操作session資料,
一、cookie操作
cookie是以鍵值對的形式保存在回應物件中并回傳給客戶端的,所以操作cookie需要在HttpResponseBase物件或其子類物件中操作并回傳給客戶端,
設定cookie
使用HttpResponseBase物件或其子類物件的set_cookie方法進行設定,該方法的常用引數如下:
key:鍵值對的key,value:鍵值對的value,max_age:有效期(秒),默認是瀏覽器會話結束時到期(即關閉整個瀏覽器時到期),expires:設定具體的過期日期,可以是一個datetime物件或者符合日期時間格式的字串,如果同時設定了max_age和expires,那么將會采用expires,path:設定cookie的有效url路徑,默認為域名下的根路徑,即根路徑下所有的路徑都是有效的,domain:設定cookie的有效域名,默認為主域名下都有效,如果只是想針對某個子域名設定cookie,則可以設定此引數,secure:默認False,如果設定為True,則表示只能在https協議下才有效,httponly:默認False,如果設定為True,則表示客戶端不能通過JavaScript操作cookie,
# 視圖函式回傳一個帶有cookie資訊的回應物件
def index(request):
response = HttpResponse('cookie page!')
response.set_cookie('username', 'zhangsan', max_age=180)
return response
獲取cookie
直接通過request.COOKIES獲取即可,這是一個字典物件,通過操作字典的方式進行操作即可,
洗掉cookie
直接使用HttpResponseBase物件或其子類物件的delete_cookie(key)方法洗掉對應key的資訊即可,
二、session操作
Django中默認是把session資料保存在資料庫中(使用migrate命令時會自動生成一個django_session表,這個表就是專門用來存盤session資料的),客戶端請求時,會將該session的sessionid加入cookie中回傳給客戶端,同樣的,如果需要session中的資料,就會根據cookie中sessionid去資料庫中獲取對應的session資料,
session常用操作
直接使用request.session即可進行session操作,可以像操作字典一樣去操作request.session,注意,在request.session上操作之后不需要再到回應物件上進行操作了,包括cookie的操作也是不需要我們去進行了,Django會自動將該session的sessionid添加到cookie中并回傳給客戶端的,
request.session中常用的方法:
get:獲取session中指定的值,pop:洗掉session中指定的值,keys:獲取session中的所有key,items:獲取session中所有的鍵值對,clear:清除當前用戶的所有session資料,這個方法不會立即洗掉資料庫中的資料,客戶端也會保留對應的sessionid,只不過無法獲取到對應的session資料而已,flush:洗掉session,并且洗掉在客戶端保存的sessionid,這個方法會同時洗掉資料庫和客戶端中對應session資料,所以這個方法通常在注銷等功能上用的較多,set_expiry(value):設定過期時間,如果value是0,則表示瀏覽器關閉時session過期;如果value是正整數,則表示多少秒后過期;如果是None,則表示使用全域配置的session過期時間,即settings.py中的SESSION_COOKIE_AGE配置項,默認為2周的時間,clear_expired:清除資料庫中過期的session資料,因為Django不會自動清理過期的session資料,所以需要我們手動的清除這些資料,除了使用這個方法外,還可以在終端使用命令python manage.py clearsessions來清除過期的session資料,
# 在視圖函式中獲取session資訊
def session_test_view(request):
# request.session['username'] = 'zhangsan'
username = request.session.get('username')
print(username)
return HttpResponse('session page!')
session的存盤方案
Django中默認是把session資料存盤在資料庫中的,但是Django也提供了其他的session存盤方案,在settings.py中配置SESSION_ENGINE為以下對應項即可:
django.contrib.sessions.backends.db:默認存盤方案,使用資料庫進行存盤,django.contrib.sessions.backends.file:使用檔案來存盤,django.contrib.sessions.backends.cache:使用快取來存盤,想要使用這個方案,需要在settings.py中配置CACHES,并且使用Memcached快取系統,不能使用純粹的記憶體來存盤,django.contrib.sessions.backends.cached_db:會將資料同時存盤到快取和資料庫中,獲取資料時會優先到快取中獲取資料,如果快取發生意外,資料也不會丟失,還可以從資料庫中找回來,django.contrib.sessions.backends.signed_cookies:將session資訊加密后存盤到瀏覽器的cookie中,使用這個方案,需要注意下:建議配置SESSION_COOKIE_HTTPONLY=True,那么瀏覽器就不能通過JavaScript來操作session資料了;還需要設定SECRET_KEY,并防止其泄露;當然,cookie中總的資料大小不能超過4KB,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195930.html
標籤:Python
上一篇:Python記憶體管理機制和垃圾回識訓制的簡單理解
下一篇:Numpy中的flatten()
