[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列表页