Skip to content

Commit 48606a7

Browse files
committed
新增基于redis的购物车类
1 parent 5ceef65 commit 48606a7

1 file changed

Lines changed: 136 additions & 0 deletions

File tree

tools/cart.py

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
#!/usr/bin/env python
2+
# encoding: utf-8
3+
4+
"""
5+
@author: zhanghe
6+
@software: PyCharm
7+
@file: cart.py
8+
@time: 16-1-27 上午10:27
9+
"""
10+
11+
12+
import redis
13+
14+
15+
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
16+
17+
18+
class Cart(object):
19+
"""
20+
购物车
21+
"""
22+
uid = ''
23+
prefix = ''
24+
25+
def __init__(self, uid, prefix='cart'):
26+
self.uid = uid
27+
self.prefix = prefix
28+
29+
def add_item(self, pid, num=1):
30+
"""
31+
添加物品
32+
:param pid:
33+
:param num:
34+
:return:
35+
"""
36+
key = "%s:%s:%s" % (self.prefix, self.uid, pid)
37+
# 判断物品是否存在
38+
if redis_client.exists(key):
39+
redis_client.hincrby(key, 'num', num)
40+
else:
41+
# 如果不存在,添加物品至购物车
42+
redis_client.hmset(key, {'pid': pid, 'num': num})
43+
return True
44+
45+
def del_item(self, pid):
46+
"""
47+
删除物品
48+
:param pid:
49+
:return:
50+
"""
51+
key = "%s:%s:%s" % (self.prefix, self.uid, pid)
52+
# 判断物品是否存在
53+
if redis_client.exists(key):
54+
redis_client.delete(key)
55+
return True
56+
57+
def increase(self, pid, num=1):
58+
"""
59+
增加物品数量
60+
:param pid:
61+
:param num:
62+
:return:
63+
"""
64+
key = "%s:%s:%s" % (self.prefix, self.uid, pid)
65+
# 判断物品是否存在
66+
if redis_client.exists(key):
67+
redis_client.hincrby(key, 'num', num)
68+
return True
69+
else:
70+
# 如果不存在,添加物品至购物车
71+
return False
72+
73+
def decrease(self, pid, num=1):
74+
"""
75+
减少物品数量
76+
:param pid:
77+
:param num:
78+
:return:
79+
"""
80+
key = "%s:%s:%s" % (self.prefix, self.uid, pid)
81+
# 判断物品是否存在
82+
if redis_client.exists(key):
83+
if num >= int(redis_client.hget(key, 'num')):
84+
# 如果超过,设置默认最小数量
85+
redis_client.hmset(key, {'num': 1})
86+
else:
87+
redis_client.hincrby(key, 'num', -num)
88+
return True
89+
90+
def cart_list(self):
91+
"""
92+
显示购物车
93+
:return:
94+
"""
95+
key = "%s:%s:*" % (self.prefix, self.uid)
96+
car_key_list = redis_client.keys(key)
97+
cart_list = []
98+
for item in car_key_list:
99+
cart_list.append(redis_client.hgetall(item))
100+
return cart_list
101+
102+
103+
def test():
104+
obj = Cart('02')
105+
print obj.cart_list()
106+
obj.add_item('3')
107+
print obj.cart_list()
108+
obj.del_item('4')
109+
print obj.cart_list()
110+
obj.increase('3')
111+
print obj.cart_list()
112+
obj.decrease('3')
113+
print obj.cart_list()
114+
obj.add_item('4')
115+
print obj.cart_list()
116+
obj.add_item('5', 10)
117+
print obj.cart_list()
118+
obj.decrease('4', 10)
119+
print obj.cart_list()
120+
121+
122+
if __name__ == '__main__':
123+
test()
124+
125+
126+
"""
127+
测试结果
128+
[]
129+
[{'num': '1', 'pid': '3'}]
130+
[{'num': '1', 'pid': '3'}]
131+
[{'num': '2', 'pid': '3'}]
132+
[{'num': '1', 'pid': '3'}]
133+
[{'num': '1', 'pid': '4'}, {'num': '1', 'pid': '3'}]
134+
[{'num': '10', 'pid': '5'}, {'num': '1', 'pid': '4'}, {'num': '1', 'pid': '3'}]
135+
[{'num': '10', 'pid': '5'}, {'num': '1', 'pid': '4'}, {'num': '1', 'pid': '3'}]
136+
"""

0 commit comments

Comments
 (0)