django.contrib.auth.login()记录用户的登录状态:login(request, user)使用Django的session框架来将用户的ID保存在session
Django项目默认启用Session。
打开settings.py文件,在项MIDDLEWARE_CLASSES中启用Session中间件。
1. 首先中间件是什么
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为AOP。
这里的session中间件就是给每个请求request(由django产生的)对象动态添加一个session属性,如果不开启,将不会给request对象添加session属性,这就是为什么WSGIRequest类没session属性的原因,因为是动态添加的
by the way,因为开启了django.contrib.auth.middleware.AuthenticationMiddleware 用户认证的中间件,所以它们在每个请求上提供一个request.user属性,且这个user属性作为模板变量会自动传入模板中,可以直接在模板中使用user对象
2. 说完session中间件,再来说说session的存储方式
settings.py文件,设置SESSION_ENGINE项指定Session数据存储的方式,可以存储在数据库、缓存、Redis等。【默认存储在数据库中】
这里选择存储在缓存中,因为session经常存取,只要网站被访问,就会读取session,且数据量小,这里可以选择用缓存来存储
django缓存的存储方式:一般来说缓存是存储在内存中的,但是基于内存的缓存有一个缺点:因为缓存数据是存储在内存中的,所以如果你的服务器宕机数据就会丢失,所以这里选择使用redis来存储缓存,redis的所有数据是放在内存中的,且可基于内存亦可持久化,所以这里我们选择redis作为django的缓存。
这里就需要在setting中配置
#django的缓存配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/9", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } }
而session作为缓存存储,所以session存储在redis中
# 使用Redis缓存session SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "default"
by the way :使用redis缓存准测:
经常存取,且不会改变的数据可以用缓存来存储,比如首页数据,数据量虽然大,但它不会经常改变
经常使用(这里的经常使用的意思是经常作dml操作),但数据量小,比如说购物车数量的改变,就可以使用缓存