基於redis實現購物車功能


先簡單介紹一下背景:
  XXXX需要開發一套在線收費視頻教育系統,今天寫了個基於redis實現的購物車功能,遇見了不少坑,特意分享出來

添加:

1. 用戶選擇:課程、價格策略,提交
2. 獲取課程、價格策略進行合法性校驗(數據庫查詢)
3. 數據獲取,構造結構:
    {
        shopping_car_用戶ID_課程ID:{
            title:"...",
            img:'xxx',
            policy:{
                ...
            }
        }
    }
4. 將數據以字典的形式保存到redis中。

修改:

1. 用戶選擇:課程、價格策略,提交
2. 獲取課程、價格策略進行合法性校驗(redis查詢)
3. 更新價格策略

刪除:

1. 用戶選擇:課程提交
2. 獲取課程合法性校驗(redis查詢)
3. 刪除 

查看:

1. 構造Key shopping_car_用戶ID_* 
2. scan_iter

 

添加課程功能具體代碼實現如下:

 1   # 1 獲取用戶提交的課程id和價格策略id
 2             courses_id = int(request.data.get('courses_id'))
 3             print('courses_id---------------',courses_id)
 4             policy_id = int(request.data.get('policy_id'))
 5             print('policy_id----------------',policy_id)
 6 
 7             # 2 獲取專題課信息
 8             course = models.Course.objects.get(id=courses_id)
 9             print('course---------------',course)
10 
11             # 3 獲取課程相關的所有價格策略
12             price_policy_list = course.price_policy.all()
13             print('price_policy_list---------------',price_policy_list)
14 
15             price_policy_dict = {}
16             for item in price_policy_list:
17                 price_policy_dict[item.id] ={
18                    "period":item.valid_period,
19                     "period_display":item.get_valid_period_display(),
20                     "price":item.price
21                 }
22 
23             # 4 判斷用戶輸入的價格策略是否合法
24             if policy_id not in price_policy_dict:
25                 print(111111111111111111)
26                 raise PricePolicyInvalid("價格策略不合法")
27 
28              # 5 將數據存入redis
29 
30             car_key = settings.SHOPPING_CAR_KEY %(request.auth.user_id, courses_id,)
31             print('car_key------------------',car_key)
32             car_dict = {
33                 'name':course.name,
34                 'course_img':course.course_img,
35                 'default_policy':policy_id,
36                 'price_policy':json.dumps(price_policy_dict)
37             }
38             self.conn.hmset(car_key, car_dict)
39             ret.code = 1000
40             ret.data = '添加成功'
View Code

 

其他各項功能類似,這里不在贅述,具體的redis操作,請轉至這里

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM