先简单介绍一下背景:
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操作,请转至这里