Django官方文檔寫到:
Django 提供對匿名會話(session)的完全支持。這個會話框架讓你可以存儲和取回每個站點(diǎn)訪客任意數(shù)據(jù)路召。它在服務(wù)器端存儲數(shù)據(jù), 并以cookies的形式進(jìn)行發(fā)送和接受數(shù)據(jù)。
下面通過例子理解
第一步敞贡,啟動SESSION
檢查settings.py文件兩個地方
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions', #第一個地方类茂,默認(rèn)開啟
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', #第二個地方屑墨,默認(rèn)開啟
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
第二步夹纫,配置數(shù)據(jù)庫
同樣是在settings.py文件中
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'accountApp',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
運(yùn)行遷移减俏,python manage.py migrate
這時,查看數(shù)據(jù)庫可以看到名為django_session的表串塑。
Snipaste_2019-11-12_20-05-30.png
第三步沼琉,編寫視圖函數(shù)和url配置器
# myapp/views.py
def login(request):
if request.session.get('username', None) == '123456':
return HTTPResponse('登錄成功')
else:
request.session['username'] = '123456'
return HTTPResponse('請登錄')
# myapp/urls.py
urlpatterns = [
path('u/login/', views.login),
]
第四步,測試
我們使用httpie工具訪問接口
Snipaste_2019-11-12_20-04-39.png
注意響應(yīng)頭中有Set-Cookie: sessionid=oe5c4tclsvq7pn071jnak7481lgqomdp; expires=Tue, 26 Nov 2019 11:42:13 GMT; Max-Age=1209600; Path=/; SameSite=Lax
再來看看數(shù)據(jù)庫中的表**django_session
Snipaste_2019-11-12_19-55-34.png
可以發(fā)現(xiàn)session_key和sessionid是一樣的桩匪。
在django中打瘪,HttpRequest.session是一個字典對象,我們可以對他多次編輯傻昙,django會自動加密并通過set-cookie響應(yīng)頭返回給瀏覽器闺骚,同時保存到django_session數(shù)據(jù)庫中。這時妆档,瀏覽器需將set-cookie的內(nèi)容保存到cookie中并在下一次請求發(fā)送給服務(wù)端僻爽。
使用httpie工具模擬瀏覽器再一次發(fā)送請求并附帶cookie
Snipaste_2019-11-12_20-03-45.png