基于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
添加课程功能具体代码实现如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 = '添加成功'
其他各项功能类似,这里不在赘述,具体的redis操作,请转至这里