对于商城项目中的历史浏览记录我们将它储存在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商城项目之历史浏览记录相关推荐

  1. Django中--使用redis存储历史浏览记录

    class UserInfoView(LoginRequiredMixin, View):'''用户中心-信息页'''def get(self, request):'''显示'''# Django会给 ...

  2. position:搜索框显示历史浏览记录

    absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "top", "righ ...

  3. easyui onclickrow 中获取列名_获取Chrome浏览器历史浏览记录实例

    1.获取谷歌浏览器浏览历史保存位置,并拷贝一份到操作目录下2.找到浏览记录文件 "History"3.将"History"文件导出到其他目录下4.查看数据库ta ...

  4. 使用redis存储历史浏览记录

    使用redis存储历史浏览记录 核心是分析流程 1.什么时候需要添加历史浏览记录? 访问具体商品详情页面时 2.什么时候需要获取历史浏览记录? 根据具体情况而定 3.存储在哪? redis数据库,如果 ...

  5. Redis添加历史浏览记录

    参考资料 http://redisdoc.com/index.html http://redis-py.readthedocs.io/en/latest/#indices-and-tables 1.什 ...

  6. Java Web学习(22): 阶段小项目实现商品浏览记录

    案例项目:商品浏览记录的实现 项目架构:采用Model1模式(JSP+JavaBean)实现 具体的步骤: 1)实现DBHelper类 2)创建实体类 3)创建页面层 4)创建业务逻辑类(DAO) 项 ...

  7. 【01】网页中清除历史浏览记录能不能彻底删除浏览记录?

    不能-- 即便你把记录全删了,也可用数据恢复工具给你找回来: 即便你用专业工具覆盖N遍,确保数据无法恢复,网站那头还记着哪个ip什么时候访问过哪些内容呢--然后跑ISP(联通或电信)一查,xx时间xx ...

  8. js操作Cookie,实现历史浏览记录

    /*** history_teacher.jsp中的js,最近浏览名师* @version: 1.0* @author: mingming*/ $(function(){getHistory(); } ...

  9. 【愚公系列】2022年01月 Django商城项目13-登录界面-QQ登录功能实现

    文章目录 前言 1.QQ互联开发者申请 2.QQ互联应用申请 3.网站对接QQ登录 一.django实际对接流程 1.创建抽象模型类 2.创建QQ用户模型类 3.注册应用 4.配置QQ登录信息 5.登 ...

  10. 015:Django商城项目表单处理

    本章知识点 1.列表数据的存储 2.列表数据的展示 3.列表数据的管理 知识点讲解 1.列表数据的存储 两部分 前端样式 涉及到图片,需要加的东西 method="post" 请求 ...

最新文章

  1. 陆奇宣布卸任COO后首度露面,将担任李彦宏的个人顾问
  2. (八)适配器模式详解
  3. 电容二极管升压电路分析
  4. 板邓:wordpress建站不得不知的安全防护(二)
  5. git如何利用分支进行多人开发
  6. 英文Ubuntu安装中文包(locale)的方法
  7. 2019 amazingdotnet 公众号回顾
  8. html中水印影响文字复制,HTML中文字水印的清除方法_HTML教程
  9. Java LinkedList公共对象pollLast()方法(带示例)
  10. 人工智障学习笔记——深度学习(2)卷积神经网络
  11. spring什么版本支持java8_升级spring4.1.6和支持java8
  12. python判断、创建文件夹
  13. OpenCV-Canny边缘检测
  14. arcpy.mapping常用四大件-StyleItem
  15. groupdel 删除组_如何在Linux中删除组– groupdel命令
  16. crossentropy java_示例CrossEntropyLoss用于pytorch中的3D语义分段
  17. android 瀑布流StaggeredGridLayoutManager重新排序后,顶部留白处理
  18. Ajaxsubmit表单提交
  19. 学习Java软件开发,可以从事什么工作?
  20. Java小游戏学习笔记

热门文章

  1. 一键清除失效/删除微博转发微博收藏爬虫
  2. JS计算日期相减天数
  3. chrome插件离线安装包(.crx)下载
  4. 〖Python 数据库开发实战 - MySQL篇㉕〗- 数据更新操作 - UPDATE 语句
  5. 软路由安装php,爱快软路由上安装黑群晖方法教程
  6. oracel vm 安装windows server 2012报错Error 0x000000C4
  7. oracle 索引的整理
  8. 手把手教你如何对接支付宝支付接口(奶爸级别)
  9. 《图书管理系统》需求分析
  10. C#保存图片、压缩图片大小、缩放图片比例