基于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操作,请转至这里

 

posted @ 2018-06-08 21:25  TheLand  阅读(3155)  评论(0编辑  收藏  举报