文章目录

  • 前言
  • 一、商品浏览历史记录功能实现
    • 1.后台统计代码
    • 2.前台请求接口代码
      • 2.1 用户中心获取浏览历史记录
      • 2.2 商品详情页保存浏览记录

前言

浏览商品的历史记录主要有两种方式实现

  1. cookie(用户浏览器存储)
  2. redis(服务端存储)

本文介绍redis实现用户浏览商品的历史记录

思路: 用户每次浏览商品时, 向后台发送请求, 携带商品ID, 然后在 Redis中存储: 用户ID和浏览的商品ID,以时间排序. 来实现存储用户浏览历史记录.
其比较复杂的是redis选用数据结构(有序Set)

一、商品浏览历史记录功能实现

1.后台统计代码

class AddUserHistroyView(LoginRequiredJSONMixin,View):def get(self,request):# 根据用户id,获取redis中的指定数据user = request.userredis_conn = get_redis_connection('history')# [1,2,34,] 根据id查询商品详细信息ids = redis_conn.lrange('history_%s'%user.id,0,4)# [SKu,SKU,SKU] 对象转换为字典sku_list = []for id in ids:sku = SKU.objects.get(pk=id)sku_list.append({'id': sku.id,'name': sku.name,'default_image_url': sku.default_image.url,'price': sku.price})# 返回相应return http.JsonResponse({'code':RETCODE.OK,'errmsg':'ok','skus':sku_list})def post(self,request):# 1.接收数据  用户信息,商品iduser = request.userdata = json.loads(request.body.decode())sku_id = data.get('sku_id')# 2.验证数据try:# pk primary key 主键 当前的主键就是 idSKU.objects.get(pk=sku_id)# SKU.objects.get(id=sku_id)except SKU.DoesNotExist:return http.JsonResponse({'codd':RETCODE.NODATAERR,'errmsg':'暂无次商品'})# 3.保存数据(后台:mysql /redis中)#  保存在列表中#  3.1 连接redisfrom django_redis import get_redis_connectionredis_conn = get_redis_connection('history')#  3.2  先删除有可能存在的这个商品id#http://doc.redisfans.com/#LREM key count valueredis_conn.lrem('history_%s'%user.id,0,sku_id)#  3.3  再添加商品idredis_conn.lpush('history_%s'%user.id,sku_id)#  3.4  因为最近浏览没有分页功能我们只保存5条历史记录redis_conn.ltrim('history_%s'%user.id,0,4)# 4.返回相应return http.JsonResponse({'code':RETCODE.OK,'errmsg':'ok'})

2.前台请求接口代码

2.1 用户中心获取浏览历史记录

// 请求浏览历史记录
browse_histories(){var url = this.host + '/users/browse_histories/';axios.get(url, {responseType: 'json'}).then(response => {this.histories = response.data.skus;for(var i=0; i<this.histories.length; i++){this.histories[i].url = '/goods/' + this.histories[i].id + '.html';//跳转商品详情页面}}).catch(error => {console.log(error.response);})
}

2.2 商品详情页保存浏览记录

// 保存用户浏览记录
save_browse_histories(){if (this.sku_id) {var url = this.host + '/browse_histories/';axios.post(url, {'sku_id': this.sku_id}, {headers: {'X-CSRFToken': getCookie('csrftoken')},responseType: 'json'}).then(response => {console.log(response.data);}).catch(error => {console.log(error.response);});}
},

【愚公系列】2022年02月 Django商城项目 29-商品浏览历史记录功能实现相关推荐

  1. 【愚公系列】2022年01月 Django商城项目 24-商品列表页功能实现

    文章目录 一.商品列表页功能实现 1.后台查询代码 二.面包屑信息展示 1.前台html代码 2.实际效果 三.列表页信息展示 1.前台html代码 2.实际效果 一.商品列表页功能实现 1.后台查询 ...

  2. 【愚公系列】2022年02月 Django商城项目 34-订单支付功能实现(支付宝)

    文章目录 前言 一.回调逻辑处理 1.安装SDK 2.生成私钥公钥 3.setting中支付宝配置信息 4.生成支付URL 5.接收支付成功信息 前言 具体支付宝支付流程可参考这篇文章:https:/ ...

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

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

  4. 【愚公系列】2022年01月 华为鸿蒙OS-03-四种模式开发实操

    文章目录 前言 一.使用JS语言开发(传统代码方式) 1.index页面源码 2.details页面源码 二.使用JS语言开发(低代码方式) 1.新建工程:注意选择 2.选择低代码新建页面 3.页面分 ...

  5. 滚动测试报告 2022年02月

    SpeechIO的所有历史文章可在语音之家网站的[声浪]-[SpeechIO专区]查看,评测结果数据可在语音之家(PC端)的[评测]页面查看. 官网地址:http://www.speechhome.c ...

  6. 【愚公系列】回顾2022年技术博客的总结与展望

    文章目录 前言 一.回顾2022年的活动和成就 1.2022年所做的事 2.2022年收获和成就 二.分析2022年的表现 1.过去一年优缺点分析 2.过去一年表现认同度 三.展望2023年的计划 1 ...

  7. 【愚公系列】(HDC.Cloud)华为开发者大会游记

    文章目录 前言 一.(HDC.Cloud)华为开发者大会游记 1.受邀参加 2.开发者大会首页 3.第一天 4.第二天 5.第三天 总结 前言 HDC.Cloud华为开发者大会是由华为举办的一年一度的 ...

  8. 【愚公系列】华为产品测评官-开发者之声(CodeArts产品流程体验)

    文章目录 前言 一.华为云CodeArts产品体验 1.软件开发生产线使用流程 1.1 配置项目 1.2 配置代码仓库 1.3 配置流水线 2.使用软件开发生产线快速搭建项目(ECS篇) 2.1 前提 ...

  9. 【shopify 1】调研出海项目,发现shopify没有java的相关SDK接口,但是找到一个最新2022年6月的Java项目分享了相关代码,使用docker进行环境搭建、编译,并成功启动

    目录 前言 1,关于shopify java调研 2,发现一个新的关于shopify的JavaSDK开源项目是2022年6月发布的 3,使用OAuth2 进行授权的逻辑 4,解决相关问题,解决配置依赖 ...

  10. 【愚公系列】2022年02月 U3D全栈班 005-Unity引擎视图

    文章目录 一.引擎视图 1.Project:项目视图 2.Hierarchy:结构视图 3.Inspector:检查器 4.Scene:场景 5.Game:游戏画面 6.Console:控制台 总结 ...

最新文章

  1. oracle数据库可以存图片吗,如何往数据库(Oracle)里存储图片和文件
  2. 两个html文件互相访问变量,访问一个js文件的变量上的HTML文件
  3. zoj 3841 Cards
  4. icpc网络赛第二场K Meal
  5. linux view查看日志命令,linux查看日志文件内容命令tail、cat、tac、head、echo、vi
  6. 统计一句话中每个字母出现的次数
  7. 借助CSS来管理js事件
  8. 【代码优化】坚持使用Override注解
  9. Java---遍历Map集合的三种方式
  10. Bioedit 使用
  11. [33期] 穿越地平线的渴望
  12. photo的复数是photos
  13. Android 中 使用 Google Paly 支付 简介
  14. Maven 自问自答
  15. JavaScript数据类型、引用类型、操作符、语句
  16. 软件工程毕业设计课题(34)基于JAVA毕业设计JAVA医院预约挂号系统毕设作品项目
  17. (Java实现) 细胞
  18. 数据结构—1.时间复杂度
  19. php自动登录QQ空间,QQ空间自动登录 - brivio的个人页面 - OSCHINA - 中文开源技术交流社区...
  20. ofo开放共享单车大数据平台

热门文章

  1. PHP爬虫微博某个话题的所有内容,GitHub - wansho/sina_weibo_crawl: 爬取新浪微博某一话题的数据,可以替代微博搜索接口...
  2. 手把手教你十分钟搞定影视类的微信公众号图文排版!
  3. 实现Excel实现下拉框选择对应的数据(数据验证)
  4. source pages
  5. 二、用于数据分析的Tableau技巧
  6. 计算机桌面不同步,电脑时间不同步怎么回事 电脑时间不能自动更新如何修复...
  7. 网赚项目:揭秘闲鱼项目,信息差赚钱新手也能日入200+
  8. 【办公】如何把选择题做成excel文档
  9. eclipse 图形界面设计技巧——JLabel
  10. ip归属地是什么?ipv4和ipv6区别?