美多商城用户浏览历史记录总结

本文介绍了一种利用Redis存储用户浏览历史记录的方法,包括如何存储SKU_id到Redis,以及如何从前端请求中获取并展示这些数据。具体实现涉及了Django框架下视图的创建与序列化器的自定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户浏览历史记录

  • 我们将浏览数据存储在redis中, 存储的数据形式如下

    'history_%s' % user.id: [sku_id, sku_id, ...]
    
  • 当浏览页面详情页时, 前端发送sku_id给后端, 后端通过user_id储存在redis中

    # 视图如下,post方法满足要求
    class UserHistory(CreateAPIView):
        serializer_class = UserHistorySerializer
        
    #序列化器重写create方法
    class UserHistorySerializer(serializer.Serializer):
        # 增加显示指明字段
        sku_id=serializer.IntegerField(min_value=1)
        def validate(self,attrs):
            try:
                sku=SKU.objects.get(id=attrs['sku_id'])
            except:
                return Response({'error':'数据不存在'})
            return attrs
        def create(self,attrs):
            user = self.context.get('request').user
            conn = get_redis_connection('history')
            sku_id=attrs['skud_id']
            # 首先删除列表里的陈旧数据
            conn.lrem('history_%s'%user.id,0,sku_id)
            # 增加新的数据
            conn.lpush('history_%s'%user.id,0,sku_id)
            # 设置数据保存上限
            conn.ltrim('history_%s'%user.id,0,10)
            # 没有对象返回字典对象
            return attrs
    
  • 在用户中心页面, 前端发送GET /browse_histories/ 请求, 后端返回sku数据

    # 前端发送请求后, 后端根据user_id从数据库找出上面存储的sku_id列表, 然后序列化返回对象数据就行了
    # 对上面的视图进行修改使用
    class UserHistory(ListCreateAPIView):
        def get_serilizer_class(self):
            if self.request.method=='GET':
                return UserHistorySerializer
            else:
                return SkuSerializer
    	# 对查询集做修改
        def get_queryset(self):
            conn = get_redis_connection('history')
            user=self.request.user
            sku_list=conn.lrange('history_%s'%user.id,0,10)
            skus=SKU.objects.filter(id__in=sku_list)
            return skus
    
    class SkuSerializer(serializer.Serializer):
        model=SKU
        fields=("id","name","price","default_image_url","comments")
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值