[TOC]
django需要使用一個中間價來實現 `session`功能, 一般情況下默認啟用了該中間價 ,可以在 `settings.py` 的 `MIDDLEWARE` 設置項目中查看。
```python
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
```
確保下邊這句話的存在
```
'django.contrib.sessions.middleware.SessionMiddleware',
```
## 配置儲存引擎
session可以存儲在數據庫,本地緩存中,需要在 `settings.py` 文件中設置。
### 存儲在sql數據庫
默認情況下,django將session存儲在數據庫中,在 `settings.py ` 文件的 `INSTALLED_APPS` 配置項中確認有 `'django.contrib.sessions'` 的存在。
可以設置如下配置項,也可以不寫,因為是django的默認配置項。
```
SESSION_ENGINE='django.contrib.sessions.backends.db'
```
運行 `manage.py migrate` 命令進行數據庫遷移,在數據庫內創建sessions表。
### 儲存在緩存
添加配置項
```
SESSION_ENGINE='django.contrib.sessions.backends.cache'
```
但是只把數據儲存在緩存中是不安全的。因為一旦緩存滿了,系統會自動清除部分數據,服務器重啟會清除全部數據。
為了保證數據安全,可以使用以下配置項,在儲存在緩存的時候,也會在數據庫中儲存一份,保證數據安全。
```
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
```
### 儲存在本地文件
添加配置項
```
SESSION_ENGINE='django.contrib.sessions.backends.file'
```
同時,必須正確配置SESSION_FILE_PATH(默認使用tempfile.gettempdir()方法的返回值),確保你的文件存儲目錄,以及Web服務器對該目錄具有讀寫權限。
### 儲存在redis
添加配置項
```python
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
```
`redis://127.0.0.1:6379/1` 代表儲存在本機redis的一號庫。
如果redis不是在本機,需要修改redis的配置文件,添加特定ip地址。
Linux環境下,redis的配置項在 `/etc/redis/redis.conf`
在 `bind` 配置項添加地址即可 `bind 127.0.0.1 xxx.xxx.xxx.xxx`
添加后重啟redis服務 `sudo service redis-server restart`
## session操作
通過 `HttpRequest` 對象的session屬性進行會話的讀寫操作。
以鍵值對的格式寫session。
```
request.session['鍵']=值
```
根據鍵讀取值。
```
request.session.get('鍵',默認值)
```
清除所有session,在存儲中刪除值部分。
```
request.session.clear()
```
清除session數據,在存儲中刪除session的整條數據。
```
request.session.flush()
```
刪除session中的指定鍵及值,在存儲中只刪除某個鍵及對應的值。
```
del request.session['鍵']
```
設置session的有效期
```
request.session.set_expiry(value)
```
- 如果value是一個整數,session將在value秒之后,沒有活動后過期。
-
- 如果value為0,那么用戶session的Cookie將在用戶的瀏覽器關閉時過期。
-
- 如果value為None,那么session有效期將采用系統默認值,默認為兩周,可以通過在settings.py中設置SESSION_COOKIE_AGE來設置全局默認值。
- 1.介紹
- 2.工程搭建
- 2.1.環境配置
- 2.2.創建工程
- 2.3.創建子應用
- 2.3.1.pycharm打開項目
- 2.4.創建視圖
- 3.基本配置
- 3.1.settings基本配置項
- 3.2.路由配置
- 4.請求響應
- 4.1.request
- 4.2.response
- 4.3.cookie
- 4.4.session
- 5.類視圖中間件
- 5.1.類視圖
- 5.2中間件
- 6.數據庫
- 6.1.數據庫配置
- 6.2定義模型類
- 6.3數據庫遷移
- 6.4數據庫操作
- 6.5查詢集
- 6.6模型管理器
- 7.模板表單
- 7.1使用模板
- 7.2模板標簽
- 7.3表單
- 8.后臺管理
- 8.1Admin
- 8.2自定義模型類樣式
- 8.3列表頁