应用名/views.py(视图,视图函数):
from django.shortcuts import render
from django.http import HttpResponse
# 视图函数。 设置session
def set_session(request):
request.session['username'] = 'smart' # 设置session
request.session['age'] = 18
# 设置过期时间(cookie中的session_id的过期时间)。 单位:秒
request.session.set_expiry(5) # 0:表示关闭浏览器过期;None:表示永不过期。 默认两周后过期。
return HttpResponse('设置session')
# 视图函数。 获取session
def get_session(request):
if request.session.has_key('username'):
username = request.session['username'] # 获取session。 没有对应的值会抛异常。
# request.session.get('键',默认值) # 获取session
return HttpResponse(username)
# 视图函数。 清除session信息
def clear_session(request):
# request.session.clear() # 清除session中的内容,但session_id对应的记录还存在。
request.session.flush() # 清除session中的内容,并且session_id对应的整条记录也被删除。
# del request.session['键'] # 删除指定键和值。
return HttpResponse('清除成功')
项目名/settings.py(项目配置,开启session。默认已开启session):
session的存储方式:数据库、缓存、混合存储。(默认存放在数据库的django_session表中)
项目名/settings.py(项目配置,session的存储方式):
# 存放在数据库中 (默认)
SESSION_ENGINE='django.contrib.sessions.backends.db'
# 存放在缓存中
# SESSION_ENGINE='django.contrib.sessions.backends.cache'
# 先从缓存中取,如果没有再从数据库中取。
# SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
如果session存储在数据库中,需要在项INSTALLED_APPS中安装Session应用:
项目名/settings.py(项目配置,INSTALLED_APPS中安装Session应用):
使用Redis存储session
1.安装redis
pip3 install django-redis-sessions==0.5.6
2. 项目名/settings.py(项目配置,增加如下配置):
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost' # redis服务的ip
SESSION_REDIS_PORT = 6379 # redis服务端口号
SESSION_REDIS_DB = 2 # redis中的哪个数据库。 (redis中默认有16个数据库,数据库编号从0开始)
SESSION_REDIS_PASSWORD = ''
SESSION_REDIS_PREFIX = 'session' # sessionid键的前缀。
管理redis的命令,需要保证redis服务被开启
查看:ps ajx|grep redis
启动:sudo service redis start
停止:sudo service redis stop
使用客户端连接服务器:redis-cli
切换数据库:select 2
查看所有的键:keys *
获取指定键的值:get name
使用Redis存储session的第二种方式:
安装Django-redis: pip3 install django-redis
项目名/settings.py(项目配置,设置Django的缓存):
# Django的缓存配置 (用redis做缓存)
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/9",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
# 配置session存储 (用Django的默认缓存存储session)
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
应用名/views.py(视图,使用Django-redis操作redis):
from django.http import HttpResponse
from django.views import View
# from redis import StrictRedis
from django_redis import get_redis_connection
# 类视图
class MyView(View):
def get(self, request):
# from redis import StrictRedis # 原生redis
# sr = StrictRedis(host='172.0.0.1', port='6379', db=9)
# 通过Django-redis获取StrictRedis对象。(需要在settings.py中配置redis的链接)
con = get_redis_connection('default') # con就是StrictRedis类型。default对应settings.py中CACHES中设置的default。
result = con.set('name', '张三') # redis中存储String
return HttpResponse('ok')
StrictRedis原生redis参考:https://blog.csdn.net/houyanhua1/article/details/85052846