首先,现在settings配置缓存数据库的设置
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION':"redis://127.0.0.1:6379/3",
'OPTIONS':{
"CLIENT_CLASS":"django_redis.client.DefaultClient",
}
}
}
#配置session储存
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
当我们登录时,配置了session缓存,会默认把session存入我们的缓存数据库
配置好了缓存的数据库redis后
开始记录用户的浏览页面记录
class Content(DetailView):
model = Article
template_name = 'article_content.html'
slug_field = 'uid'
slug_url_kwarg = 'uid'
def get(self,request,*args,**kwargs):
response = super().get(request,*args,**kwargs)
self.object.view_count += 1
self.object.save(update_fields=['view_count'])
user = request.user
if user.id:
conn = get_redis_connection('default') #建立redis连接
history_key = 'history_article_%s'%user.id #设置redis缓存的键,存的是列表类型
conn.lrem(history_key,0,self.object.id) #删除该用户的所有关于该文章的键,保证后面插入文章id的唯一性
conn.lpush(history_key,self.object.id) #想左插入文章id
conn.ltrim(history_key,0,5) #保持列表容器长度维持在6
return response
上面已经把数据存入redis了,下面用同样的方法去商品页面存id
class DownContent(DetailView):
model = Goods
template_name = 'downShow.html'
slug_field = 'uid'
slug_url_kwarg = 'uid'
def get(self,request,*args,**kwargs):
response = super().get(request,*args,**kwargs)
self.object.view_count += 1
self.object.save(update_fields=['view_count'])
user = request.user
if user.id:
conn = get_redis_connection('default')
history_key = 'history_mall_%s'%user.id
conn.lrem(history_key,0,self.object.id)
conn.lpush(history_key,self.object.id)
conn.ltrim(history_key,0,5)
return response
我这里采用同样的策略,
然后开始在用户中心从redis读取数据,在前端显示
def user_center_index(request):
user = request.user
#给一个第一次登陆的变量
first_login = 0
if user.is_fresh:
user.sum_integral(5,1)
user.integral_save(5,'每日登录',1)
user.is_fresh = 0
#如果进到了这里面,则设置为1,用于前端判断是否弹框
first_login = 1
user.save()
# order = Order.objects.filter(user=user).first()
conn = get_redis_connection('default')
history_article_key = 'history_article_%s'%user.id #文章的键
history_mall_key = 'history_mall_%s'%user.id #商品的键
history_article_list = conn.lrange(history_article_key,0,5) #获取浏览过的存入redis的所有文章id
history_mall_list = conn.lrange(history_mall_key,0,5) #获取浏览过的存入redis的所有商品id
history_view_article = [Article.objects.filter(id=art_id).first() for art_id in history_article_list] #获取浏览过的文章对象
history_view_mall = [Goods.objects.filter(id=art_id).first() for art_id in history_mall_list] #获取浏览过的商品对象
return render(request,'user_manage/user_center_index.html',{
'history_view_article':history_view_article,
'history_view_mall':history_view_mall,
'first_login':first_login
})
好了,返回到前端渲染就行了
给个示例图:
好了好了,就这样了,缓存博大精深,后面有找时间接着再分享,好了,先到这里了