• 4、redis获取首页购物车商品数目+用户商品历史浏览记录的添加


    一、redis获取首页购物车商品

    利用redis的hash类型保存首页购物车的商品,一个用户对应一个key名cart_(user.id),首页购物车的数量是在用户登陆的情况下才会展示,下面都只是获取redis保存的key值,并还没有设置添加key值的内容:

    #获取用户购物车中商品的数目
    user = request.user
    cart_count = 0
    if user.is_authenticated:#用户已经登陆
        #获取购物车数量使用hash
    
        #连接setting配置的redis
        conn = get_redis_connection('default')
        cart_key = 'cart_%d'%user.id
        #获取物品种类的数量
        cart_count = conn.hlen(cart_key)
    
    1. hash _hlen _获取数量
        def hlen(self, name):
            "Return the number of elements in hash ``name``"
            return self.execute_command('HLEN', name)
    

    二、用户商品历史浏览记录的添加

    利用redis的list类型存储商品浏览的记录,一个用户对应一个key名history_(user.id),下面都只是获取redis保存的key值,并还没有设置添加key值的内容,先删除掉列表里面已存在相同的商品-->把最新浏览的记录添加到列表的左侧,选择保存多少条最新的浏览记录:

    #获取用户购物车中商品的数目
    user = request.user
    cart_count = 0
    if user.is_authenticated:#用户已经登陆
        #获取购物车数量使用hash
    
        #连接setting配置的redis
        conn = get_redis_connection('default')
        cart_key = 'cart_%d'%user.id
        #获取物品种类的数量
        cart_count = conn.hlen(cart_key)
    
        #获取用户历史浏览记录,使用list
        conn = get_redis_connection('default')
        #浏览历史记录每个用户浏览商品的key
        history_key = 'history_%d'%user.id
    
        #删除列表中的已存在浏览的goods_id
        conn.lrem(history_key,0,goods_id)
    
        #把新浏览的goods_id插入到列表的左侧
        conn.lpush(history_key,goods_id)
        #只保存用户最新浏览的5条记录
        conn.ltrim(history_key,0,4)
    
    1. list _ lrem (移除,有就移除,没有也就不做任何操作):
        def lrem(self, name, count, value):
            """
            #name=key,
            #count=0删除列表中所有的相同value,count>0删除列表中相同的value从做左到右,count<0删除列表中相同的value从右到左
            
            Remove the first ``count`` occurrences of elements equal to ``value``
            from the list stored at ``name``.
    
            The count argument influences the operation in the following ways:
                count > 0: Remove elements equal to value moving from head to tail.
                count < 0: Remove elements equal to value moving from tail to head.
                count = 0: Remove all elements equal to value.
            """
            return self.execute_command('LREM', name, count, value)
    
    1. list _ lpush (插入)
        #从左往右插入
        def lpush(self, name, *values):
            "Push ``values`` onto the head of the list ``name``"
            return self.execute_command('LPUSH', name, *values)
    
    1. list _ ltrim (相当于切割)
        def ltrim(self, name, start, end):
        
            #name -->key
            #start -->开始的位置
            #end -->结束的位置
            """
            Trim the list ``name``, removing all values not within the slice
            between ``start`` and ``end``
    
            ``start`` and ``end`` can be negative numbers just like
            Python slicing notation
            """
            return self.execute_command('LTRIM', name, start, end)
    
  • 相关阅读:
    获取label标签内for的属性值-js
    js万亿级数字转汉字的封装方法
    a标签的伪元素的应用——link,hover,visited,active
    JS声明变量的写法
    VUE环境配置步骤及相关Git Bash命令的使用
    display:inline-block下,元素不能在同一水平线及元素间无margin间距的问题解决方法
    css变量的用法——(--cssName)
    img的属性alt 与 title的区别
    返回结果的HTTP状态码——《图解http》第四章
    HTTP报文内部的HTTP信息——《图解HTTP》第三章
  • 原文地址:https://www.cnblogs.com/venvive/p/12174294.html
Copyright © 2020-2023  润新知