django商城项目之历史浏览记录
对于商城项目中的历史浏览记录我们将它储存在redis缓存中,便于存储和拿取数据,
而我们首先要明确历史记录什么时候添加,什么时候获取
添加 | 访问商品详情页面的时候,需要添加历史浏览记录 |
---|---|
获取 | 访问用户中心个人信息页的时候,需要获取历史记录 |
每个用户的历史浏览记录用一条数据保存:最后浏览的记录应该最左侧
list:使用list类型保存用户的历史浏览记录
history_用户id:[1,2,3]
历史浏览记录的html页面:
<h3 class="common_title2">最近浏览</h3><div class="has_view_list"><ul class="goods_type_list clearfix">{% for goods in goods_li %}<li><a href="detail.html"><img src="{{ goods.image.url }}"></a><h4><a href="detail.html">{{ goods.name }}</a></h4><div class="operate"><span class="prize">¥{{ goods.price }}</span><span class="unit">{{ goods.price }}/{{ goods.unite }}</span><a href="#" class="add_goods" title="加入购物车"></a></div></li>{% empty %}无历史浏览记录{% endfor %}</ul></div>
添加views:
# 商品详情页
class DetailView(View):def get(self, request, id):try:# 获取数据goods = GoodsSKU.objects.get(id=id)except GoodsSKU.DoesNotExist:# 商品不存在return redirect(reverse('goods:index'))# 获取商品分类信息types = GoodsType.objects.all()# 获取评论信息sku_orders = OrderGoods.objects.filter(sku=goods).exclude(comment='')# 获取最新商品信息new_sku = GoodsSKU.objects.filter(type=goods.type).order_by('-create_time')[:2]# 获取同一规格spu商品same_spu_skus = GoodsSKU.objects.filter(goods=goods.goods).exclude(id=id)context = {'goods': goods,'types': types,'sku_orders': sku_orders,'new_sku': new_sku,'same_spu_skus': same_spu_skus}# 创建user对象user = request.userif user.is_authenticated():# 获取未登录时购物车中的数量con = get_redis_connection('default')cart_key = 'cart_%d' % user.idcart_count = con.hlen(cart_key)# 判断是否存在历史记录# 链接redis数据库con = get_redis_connection('default')history_key = 'history_%d' % user.id# 删除表中相同的con.lrem(history_key, 0, id)# 添加历史记录# 使用lpush添加con.lpush(history_key, id)# 只保存5个con.ltrim(history_key, 0, 4)# 组织模板的上下文context.update(cart_count=cart_count)return render(request, 'apps/detail.html', context)
获取:
class UserInfo(LonginRequiredMixin, View):"""用户中心"""def get(self, request):# page = 'user'# request.user# 如果用户未登录-->An...类的实例------is_authenticated() False# 如果说此时用户已经登录,--->User类的实例----is_authenticated() True# request.user.is_authenticated()# 除了你给模板文件传递模板变量之外,django框架会把request.user传递给模板文件中# 获取用户的个人信息user = request.useraddress = Address.objects.get_default_address(user)# try:## address = Address.objects.get(user=user, is_default=True)## except Address.DoesNotExist:## # 不存在默认的地址# address = None# 历史浏览记录# 链接redis数据库# con = StrictRedis(host='127.0.0.1', port=6379, db=9)con = get_redis_connection('default')history_key = 'history_%d' % user.id# # 取用户redis中的浏览的五个商品idsku_ids = con.lrange(history_key, 0, 4)# 获取用户id# 添加到列表中显示goods_li = []# goods = GoodsSKU.objects.filter(id__in=sku_ids)# for s_id in sku_ids:# for good in goods:# if s_id == good.id:# goods_li.append(good)# 第二种简写for s_id in sku_ids:good = GoodsSKU.objects.get(id=s_id)goods_li.append(good)# 上下文管理器context = {'page': 'userinfo', 'address': address, 'goods_li': goods_li}return render(request, 'apps/user_center_info.html', context)
django商城项目之历史浏览记录相关推荐
- Django中--使用redis存储历史浏览记录
class UserInfoView(LoginRequiredMixin, View):'''用户中心-信息页'''def get(self, request):'''显示'''# Django会给 ...
- position:搜索框显示历史浏览记录
absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "top", "righ ...
- easyui onclickrow 中获取列名_获取Chrome浏览器历史浏览记录实例
1.获取谷歌浏览器浏览历史保存位置,并拷贝一份到操作目录下2.找到浏览记录文件 "History"3.将"History"文件导出到其他目录下4.查看数据库ta ...
- 使用redis存储历史浏览记录
使用redis存储历史浏览记录 核心是分析流程 1.什么时候需要添加历史浏览记录? 访问具体商品详情页面时 2.什么时候需要获取历史浏览记录? 根据具体情况而定 3.存储在哪? redis数据库,如果 ...
- Redis添加历史浏览记录
参考资料 http://redisdoc.com/index.html http://redis-py.readthedocs.io/en/latest/#indices-and-tables 1.什 ...
- Java Web学习(22): 阶段小项目实现商品浏览记录
案例项目:商品浏览记录的实现 项目架构:采用Model1模式(JSP+JavaBean)实现 具体的步骤: 1)实现DBHelper类 2)创建实体类 3)创建页面层 4)创建业务逻辑类(DAO) 项 ...
- 【01】网页中清除历史浏览记录能不能彻底删除浏览记录?
不能-- 即便你把记录全删了,也可用数据恢复工具给你找回来: 即便你用专业工具覆盖N遍,确保数据无法恢复,网站那头还记着哪个ip什么时候访问过哪些内容呢--然后跑ISP(联通或电信)一查,xx时间xx ...
- js操作Cookie,实现历史浏览记录
/*** history_teacher.jsp中的js,最近浏览名师* @version: 1.0* @author: mingming*/ $(function(){getHistory(); } ...
- 【愚公系列】2022年01月 Django商城项目13-登录界面-QQ登录功能实现
文章目录 前言 1.QQ互联开发者申请 2.QQ互联应用申请 3.网站对接QQ登录 一.django实际对接流程 1.创建抽象模型类 2.创建QQ用户模型类 3.注册应用 4.配置QQ登录信息 5.登 ...
- 015:Django商城项目表单处理
本章知识点 1.列表数据的存储 2.列表数据的展示 3.列表数据的管理 知识点讲解 1.列表数据的存储 两部分 前端样式 涉及到图片,需要加的东西 method="post" 请求 ...
最新文章
- 陆奇宣布卸任COO后首度露面,将担任李彦宏的个人顾问
- (八)适配器模式详解
- 电容二极管升压电路分析
- 板邓:wordpress建站不得不知的安全防护(二)
- git如何利用分支进行多人开发
- 英文Ubuntu安装中文包(locale)的方法
- 2019 amazingdotnet 公众号回顾
- html中水印影响文字复制,HTML中文字水印的清除方法_HTML教程
- Java LinkedList公共对象pollLast()方法(带示例)
- 人工智障学习笔记——深度学习(2)卷积神经网络
- spring什么版本支持java8_升级spring4.1.6和支持java8
- python判断、创建文件夹
- OpenCV-Canny边缘检测
- arcpy.mapping常用四大件-StyleItem
- groupdel 删除组_如何在Linux中删除组– groupdel命令
- crossentropy java_示例CrossEntropyLoss用于pytorch中的3D语义分段
- android 瀑布流StaggeredGridLayoutManager重新排序后,顶部留白处理
- Ajaxsubmit表单提交
- 学习Java软件开发,可以从事什么工作?
- Java小游戏学习笔记